►
From YouTube: .NET Design Review: Nullable Annotations
Description
We're trying to finish reviewing the nullable annotations for System.Runtime.
A
E
G
B
A
B
K
G
K
K
A
I
said,
like
I,
was
lazy
so
far
Alexa,
so
yesterday,
I
spent
the
time
to
banging
the
tool
to
actually
get
to
a
point
where
we
can
actually
export
this
diff.
Whatever
do
is
I
will
export
the
entire
dish
and
my
basically
notes
as
an
API
review,
entry
and
API
reviews
repo,
because
otherwise
there's
no
convenient
place
to
put
it
and
don't
want
to
put
it
on
your
PR
because
that's
impossible
to
look
at.
In
my
opinion,
this
implementation
right
as.
C
K
F
A
Like
in
the
world,
were
you
basically
to
chaining
of
methods?
Basically
assumptions?
That's
the
shorter
one
you
just
fall
to
do
and
that
usually
the
problem
before
default,
or
let's
say
you
want
to
pass
in
the
fourth
argument,
but
you
don't
bother
about
the
other
guys.
You
just
should
be
able
to
get
the
same
behaviors
if
you
would
have
caught
the
shorter
one
and
that's
basically.
A
K
A
Yeah
I
mean,
if
you
have
other
places
where
we
do
accept,
not
to
mean
the
default.
Maybe
we
should
just
do
it
there
as
well,
if
it's
a
it
just
yeah,
it's
just
an
informal
always
strikes
me
something
you
pass
in,
but
the
argument
here
for
to
string
with
them
overload
with
move
out,
make
sense,
and
then
you
try
parts.
One
just
didn't
have
an
overload
about
that's
why
I
think
it
was
brought
up.
A
L
A
A
D
L
F
You,
or
also
on
the
class
just
before
this
for
unhandled
exceptional
event,
args
looks,
like
exception,
was
non
nullable,
but
the
implementation
accepts
no,
because
it
just
assigns
it
out
to
the
field
with
no
checks
for
what,
for
both
for
exception
there.
We
just
decided
to
the
field
with
no
checks,
so
you
could
actually,
just
again
all
I've
heard
of
exception,
object.
K
Sure
but
whoa,
ok,
so
there's
a
few
things
one.
If
we
were
to
decide
to
make
one
of
these
question
mark,
we
would
make
the
other
one
question
mark,
but
we
also
trust
that
if
you're
respecting
the
nullable
annotations
you're
respecting
them
everywhere.
So
in
order
to
get
a
null
into
this,
you
would
have
had
to
have
bang
it
away.
H
K
K
Depends
it's
a
it's
a
question
of
intent.
Do
we
believe
that
that
this
should
accept
nulls?
If
it
should,
then
we
make
a
question
mark.
We
make
exception,
option
question
mark
if
we
believe
the
intent
is
well.
Maybe
we
wanted
to
help.
You
know
we
should
have
had
an
exception
there,
but
we
don't
so
and
no
one
should
be
passing
Noland
here
anyway,
because
it's
about
an
unhandled
exception
and
therefore
you
should
always
have
an
exception,
and
so
the
intent
is.
We
don't
take
nulls,
but.
F
K
K
F
A
A
K
A
A
K
If
we
want
to
change
this,
there
are
a
bunch
of
places
we
should
go
and
change.
We
did
a
similar
thing
as
well
like
a
bunch
of
attributes
that
I've
just
passed
through
from
the
you
know
the
constructor
to
the
property
and
don't
check
anything
and
don't
throw
because
well
they're
not
supposed
to
throw,
and
so
you
know
we
have
a
bunch
of
those
where
we
say
well
reality.
You
really
shouldn't
be
passing
null
here.
The
fact
that
you
use
them
has
attributes
off
it
for
many
of
them,
the
c-sharp
compiler.
Will
they.
A
Yeah
I
mean
I
would
probably
expect
that
to
happen
on
our
side
too,
if
you
throwing
off
and
when
you
C++
I,
think
that's
the
only
sensible
behavior
but
yeah
I
want
to
see
like
I
would
say,
that's
the
naked
non-null
and
see
what
happens
like
I
mean
I
guarantee
you.
Nobody
ever
got
for
this
thing
being
over,
like
that.
A
H
K
Whether
it
in
general,
the
powders
that
been
such
an
eric,
then
it's
gonna
be
maybe
know
when
false,
and
if
it's
a
non-generic,
it's
likely
going
to
be
not
Nolan.
True
problem
with
generic
says
we
we
don't
know,
we
generally
don't
know
whether,
even
if
it's
that
you
may
have
given
us
an
unknowable
generic,
and
so
we
might
successfully
get
a
null
value.
A
K
H
K
C
C
C
M
C
L
K
G
G
A
K
N
H
O
K
P
P
M
A
I
C
A
A
H
K
K
O
C
K
A
So
how
does
this
work
then?
The
compiler
allows
you
to
satisfy
the
implementation,
because
you
can,
you
cannot
implement
both
I
guess,
a
comparable
of
version,
question
mark
and
I
compare
with
a
version
because
it's
the
same
type
right
right,
so
they
would
never
already
do
that,
but
wouldn't
it
just
require.
H
H
B
P
H
A
H
K
G
G
H
A
F
Because,
like
I
know,
I
am
notable
for
some
of
my
own
projects
and
it
was
pretty
easy
to
enable
it
because
I'd
already
said.
Basically,
nothing
could
be
notable,
but
I'm
kind
of
dreading
needing
to
pull
in
the
core
Lib.
Where
things
can
mean
all
about,
because
then
I'm
going
to
have
to
add
annotations.
Even
though
I
know
it
can't
mean
it
won't,
be
no.
A
I
think
honestly,
I
would
be
shocked
if
it
wouldn't,
you
know,
significantly
make
changes
to
the
annotations
between
300
and
500
base
and
feedback
like
I.
Don't
think
you
would
I
mean
I,
don't
I.
Think
like
the
math
was
like
you
know.
Look
at
this
thing
here.
It
was
about
twelve
thousand.
Eight
is
soy.
1280
eyes
were
so
that
actually
having
a
global
somewhere
in
system
run
from
alone.
A
F
I
think
probably
the
biggest
feedback
will
be
for
people
who
have
libraries
where
they've
said
I
don't
allow
anything.
Knowable
is
making
sure
that
when
they
call
into
a
framework
API
that
does
allow
all
ability
making
sure
the
annotations
are
there
correctly
so
that
they
know
like
this
accepts
no.
But
if
you
don't
give
me
a
null
input,
I'm
not
going
to
give
you
an
old
output,
so
the
user
can
doesn't
have
to
add
in
no
null
checks
or
annotations
in
their
library
to
handle
that
right.
K
P
K
G
C
H
F
C
H
K
You
can't
put
a
question
mark
there,
so
we
instead,
we
have
a
it'll
happen,
maybe
know
when
false
wait,
a
man
this
one
might
be
not
know
one
true.
This
one
might
be
not
Nolan.
True
I
think
that's
what
it
is,
because
it's
constrained
to
class
yes,
and
we
know
with
the
semantics
of
weak
reference.
We
know
that
try
get
target
will
always
return.
Not
null
will.
H
H
M
C
C
C
M
K
H
F
K
Spectively,
what
the
attribute
is
saying
so
I
think
I
think
and
we
can
try
but
I
think
you'll
be
able
to
create
a
weak
reference
for
either
spring
or
string.
Question
mark.
Have
you
created
for
spring
question.
Mark
behaves
exactly
as
you
expect.
If
you
created
for
string,
you
won't
be
able
to
pass
null
into
the
constructors
or
into
set
target,
but
I
believe
you
will
still
be
able
to.
F
K
C
Do
that
see,
it
does
seem
to
me
like
we
should
be
able
to
put-
and
this
was
probably
a
question
for
LVM-
it
seems
to
me,
like
you-
should
be
able
to
put
a
t
question
there,
because
we
know
it's
a
class.
So
we
know
unambiguously
what
C
question
means.
There's
no
chance.
It
could
be
a
nullable
value
type.
We
just
know
what
it
means.
K
M
K
K
A
So
we're
the
good
news
is
our
code
is
very
assertive,
though
I
think
they're
from
an
API.
The
design
standpoint
I
think
it's
nicer
if
we
would
constrain
it
to
just
class
and
put
the
question
marks
in
the
user
sides,
because
I
think
if
you
just
look
at
the
generic
API
I,
don't
think
people
can
do
the
substitution.
A
They
had
easily
they'll
just
look
at
method
signatures,
but
it's
nice
that
you
see
T
question
mark
than
just
T,
and
now
all
t
was
constrained
to
class
question
mark,
but
I
think
when
you
actually
look
at
code
and
intellisense
will
give
them
the
compiler
will
do
the
substitution.
You
would
just
see
string,
question
mark,
but
then
yet
the
other
problem
of
like
well
is
this:
nobody
constraining
you
to
something
that
you
may
not
want.
Oh
yeah,
but
the
thing
I'm
concerned
about
what
that
is
is
composite
away.
A
Q
I
A
A
K
K
A
G
K
J
C
C
F
F
A
Now
I
instructionally,
comparable
answer
actually
equatable
is
the
super
complicated
feature
that
we
did
for
F
sharp,
which
I
discussed
with
will
the
other
day.
Again,
it's
really
hard
to
make
your
head
around
what
it
does
every
single
time,
I
thought
I
got.
It
turns
out,
I
didn't
so,
but
the
rough
summary
is
effectively.
F
I
G
K
K
C
H
K
H
A
D
A
A
C
R
L
L
C
C
A
I
think
this
is
the
like,
like
the
whole
default
video
attribute,
is
effectively
a
way
to
say
on
the
property
of
what
it's,
what
is
it?
Hannah
called
video
and
it
can
be
any
type
and
it
goes
through
the
whole
type
I'm
wearing
what
right
so,
like
almost
any
type
of
designer
has
they
have
a
type
of
murder
to
string
so
that
you
can
have
like
you
know,
type
could
be
point
and
then
screen
is
like
open,
open,
parens
three,
you
know
call
for
yeah,
like
it
sports
time
span
and.
K
This
is
question
mark,
but
I'm
doubting
myself,
the
type
the
implementation
allows
no,
but
it
allows
no
by
just
saying,
if
no
return,
which
means
it
doesn't
even
store
the
value.
Basically,
it's
protecting
itself
from
no
reffing,
which
makes
me
you
know.
The
intent
here
is
really
that
if
you're
using
this
constructor
you're,
giving
it
a
type
to
use
to
interpret
value,
so
I'm
wondering
if
we
should
just
remove
that
question.
Mark
probably.
F
A
F
F
F
F
A
You
think,
for
things
like
this
right
again,
like
there's
no
case
where
you
have
an
a
little
variable
somewhere
right,
because
the
only
way
you
can
put
in
these
things
is
literals.
So
you
would
have
to
actually
have
to
type
in
ull
in
source
code,
which
is
already
too
constant,
which
is
virtually
not
ever
useful
right.
A
K
M
K
K
H
A
A
H
H
O
K
H
H
K
It'll
end
up
being
knowing
that
it'll
end
up
being
invariant,
so
I
think
it's
itself.
Yeah
okay,
I
mean
we
can
test
that
quickly,
I'm,
just
seeing
if
any
apparent.
C
B
H
K
K
K
H
B
A
A
A
H
N
H
H
Which
no
that's
your
whole
important
that
well
I'm
like
again,
it's
theirs,
it's
returning,
some
sort
of
rings.
Is
this
a
proper
thing
that
has
an
internal
structure,
so
the
room
awaits.
We
promise.
We
never
give
you
back.
No,
there
would
have
soared
version
detection,
so
it
takes
a
GUI.
There
must.
A
D
D
D
A
D
K
H
I
K
H
E
E
J
J
A
D
F
K
M
I
L
H
H
F
F
A
A
F
H
A
A
K
A
H
C
C
P
F
M
F
F
A
K
J
K
Q
H
K
C
K
H
G
H
H
C
H
H
A
J
H
C
A
H
A
So
the
perfect
implementation,
we
call
into
something
in
grab
and
assembly
CS.
The
basis
says
local
mortgage,
which
I
cannot
follow
any
further
suppose
it's
one
index
and
that
basically
has
at
least
in
cards
against
wrong
model
being
no,
but
it
meaning
is-
and
it
accepts
it
to
be
now,
but
it
doesn't
throw
for
it.
I
would
expect
at
least
well
money
to
beam
Anibal
on
full
firmware,
but
yeah
yeah
Mike
a
level
is
low,
like
it's
not
like
one
of
those
API,
as
you
call
a
hundred
times
a
day.
C
H
A
I
H
H
C
H
H
H
A
A
O
A
H
E
H
K
C
H
No
public
key:
why
are
you
calling
this
so
I
mean
I
like?
Ideally,
you
should
always
be
able
to
just
do
new
like
new
thing,
dot
public
key.
He
came
old
thing
that
looked
like.
So,
if
it
all
came
out
of
one,
it
should
go
into
another
yeah,
fair
point.
Otherwise,
now
you
have
to
start
conditionally
signing
yeah.
H
D
Q
A
C
A
H
H
F
A
Don't
think
you
can't
make
any
custom
entry
with,
but
definition
must
be
x.
No
sorry,
I,
don't
think
you
can't
ever
have
that
I
mean
you
might
have
a
member
that
may
be
now
depending
on
how
you
do
them,
but
this
constructor
info
clearly
must
be
on
replied
because
it
was
applied
as
an
attribute,
which
must
be
a
time.
H
P
G
N
G
C
A
H
A
B
A
H
L
H
A
Telling
me
at
the
discussion
during
the
I'll
metadata
discussion
at
some
point
and
like
it's
odd,
but
it's
legal
in
my
hell.
The
question
is
what
we
want
to
deal
with
that
right.
He
basically
said
that
at
the
manager
level
we
were
just
like
reflection,
metadata,
we'll
just
expose
what
puts
in
il
and
make
no
statements
about.
What's
legal
or
not.
I
J
A
F
A
H
H
D
H
I
H
F
A
A
B
I
H
A
A
If
it's
a
public
feel
No
well,
it
really
is
I
mean
a
field
yes,
but
I'm,
saying
like
even
if
it's
a
property,
but
very
often
there
is
no
economic
data.
You
can
return
like
for
race.
It's
simple
to
have
to
sing
them.
You
can
just
say
if
this
is
not
a
return,
the
same
and
empty,
but
what
you
do
for
type
like?
What
type
would
you
return?
We.
G
I
H
All
right,
so
we
missed
it
on
time.
I
has
invoked
memory
effectively
the
only
implementation
of
AI
but
every
other
fight.
So
it
has
an
adult
member.
The
stakes
here,
I
think
this
impacts
on
the
right
of
the
array
can
be
done.
Yep,
probably
I'll
use
cams.
You
have
a
method
info
and
vote
says
that
also
the
argument.
Yeah.
K
A
H
O
K
A
A
F
I
mean
lay
the
Bark's
is
greater
than
the
length
of
main
parameters.
The
remaining
argument-
values
are
passed,
an
order
name
parameters
array
can
use
to
change
the
order
of
arguments
in
an
input
array,
improve
the
rake
and
pass
them
change
them.
Ours
is
I,
mean
what
it
doesn't
say,
anything
about
it,
throwing
it
to
anything,
and
it's
no
wonder.
What's
weird.
H
H
H
A
What
are
you
doing
else
that
would
end
very
quickly
your
supply
of.
H
C
D
A
A
D
A
A
O
K
H
G
H
C
A
D
A
H
I
A
H
C
You
Oh
return
parameters,
those
are
fun
BV
and
you
so
old
VB
them.
The
name
of
the
method
was
an
invisible
like
an
implicit
parameter
inside
the
body,
so
you
could
just
say,
assign
whatever
you
want
to
return
to
who
they
made
the
method
and
then
just
say
return.
It
would
return
what
whoever
was
in
stored
in
that
variable.
Is
this
representative
metadata
that
I
can't
answer.
H
A
L
H
H
We
call
I
builder,
define
P
invoke
method.
It
goes
a
really
long
time
without
noticing
that
you
said
control
is
the
return
fact.
It
will
return
you
the
method,
info
unbound,
and
then
you
get
to
deal
with
that.
What
you
will
I,
don't
know
that
it's
sensible,
so
I
don't
know
that
we
would
want
to
say
that
it
could
be
long,
but
I
think
that's
working
so.
D
N
H
Yeah,
assuming
that
that
has
no
methods,
it
returns,
the
interior.