►
From YouTube: .NET Design Review: Nullable Annotations
Description
We're reviewing nullable annotations for System.Runtime and System.Runtime.Extensions.
A
Alright,
now
we
actually
live
so
last
time
in
a
dead
stream
and
I.
Don't
know
who
was
in
the
room
last
time,
but
basically
so
disregard
the
div.
The
div
is
buggy.
The
reason
that,
if
it's
by
me
is
because
the
way
we
do
the
dipping
is
by
basically
aligning
the
api
by
their
ID,
ignoring
effectively
things
they're,
not
contributing
to
the
ID,
and
then
once
we
have
them.
You
basically
generate
the
tokens
for
both
sides
and
be
the
token
based.
A
If,
however,
when
Santi
added
the
capability
to
emit
question
marks,
the
problem
is
that,
on
the
left
hand
side-
you
can't
see
this
here,
but
basically
the
char
bracket
bracket
is
a
single
token
and
then
the
char
opening
bracket
closing
bracket
question
marks
of
four
different
tokens
and
that's
why
they
always
show
up
as
it
is,
even
though
they
haven't
changed.
Sometimes
so
the
dippers
Basin
I
mean
the
question
mark
was
added.
Yes,.
B
B
A
B
A
A
A
A
F
A
A
A
I
A
C
A
H
B
G
B
B
G
B
C
K
C
A
A
H
B
H
B
As
I
said,
I
mean
technically
I.
Think
in
the
spirit
of
the
parent
was
that
the
data
comes
from
something
and
I,
don't
know
what
the
data
contains.
I
try
to
parse
it
and
may
fail
if
I
happen.
No,
then
well,
I,
don't
have
that
done.
It's
not!
That
is
invalid.
Having
said
that,
I
think
we
basically
have
lots
of
api's.
That
return
null
strings
for
various
reasons
and
then.
E
C
You're
thinking
about
it,
though,
it's
important
to
keep
in
mind
that
this
isn't
we're
only
talking
about
things
with
the
compiler
right
so
like.
If
we
don't
have
a
question
mark,
the
compiler
will
warn
you
most
of
the
time.
If
you
have
a
string
question
mark
somewhere,
you
write
pass
it
in
so
there's
a
downside
to
removing
the
question
and
that
will
likely
be
introducing
more
warnings.
The
code.
Now
you
can
argue
those
warnings
are
helpful.
A
B
E
An
ordered
argument
about,
like
you
know
if
we
think
that
format
cannot
be
none,
so
I
would
think
that
I
am,
but
we
did
not
be
not
to
because
like
if
you
ferment
it
with
some
format.
So
you
have
both
all
the
time
you
will
not
have
one
not
and
one
by
the
way
I
do
rule
yeah,
but
but
I
understand
what
Stephen
said
about
like
yeah.
If
we
move
the
question
mark,
it
will
generate
all
the
warnings,
which
is
a
very
bad.
G
B
C
B
So
you
know
like
let's
talk
about
concrete
examples
like
when
you
would
use
this
API.
You
probably
got
the
string
either
you
read
it
directly
or
you
split
it.
Probably
you
split
it
because
our
parsing
ID
is.
We
require
the
string
passed
in
to
be
exact,
talk
and
that
can
be
parsed.
They
are
not
like
that.
The
new
utf-8
API
is
the
kind
of
parse
as
much
as
they
can.
So
you
can
only
get
it
from
string
that
split
and
if
string,
that
split
returns,
non
nullable
strings
and
you.
C
Let's
take
another,
let's
take
another
exam,
let's
say:
I
had
a
file
that
was
just
such
a
days.
One
for
mine
and
I'm.
Using
screen
readers
read
line,
read
line
returns
a
string
question
mark,
as
turns
null
when
there
are
no
more
lines
to
read.
So
if
you're
calling
tryparse
exact
on
each
line,
you
know
it
might
not
be
the
best
coding
style,
but
I
can
totally
imagine
a
loop
that
was
wild
charged,
tryparse,
exact,
same
dot,
feed
line,
but.
B
H
I
mean
I've
totally
written
quick-and-dirty.
Oh
I
need
to
fix
up
some
data
scripts
right
that
will
just
read
line
until
some
try
method
returns
false
because
I,
don't
particularly
care
and
my
output
is
wrong.
I'll
fix
it
later
right,
I'm
only
using
the
script
for
10
minutes
yeah,
but
you
probably
also
enable
enable
for
that
I
would
but.
A
A
A
A
B
B
C
J
C
B
Don't
have
to
implement
it
as
I
mean
return.
Type
is
just
like
a
local
variable
that
Steve
was
talking
about,
which
basically
means,
if
I
just
chain
calls
and
suddenly
we
have
question
mark.
But
the
input
does
not
accept
question
marks
and
my
code
gets
a
warning
and
potentially
die
roten.
So
it
seems
like
either
way.
N
C
F
G
P
G
I
C
H
G
A
What
is
so
I
would
generally
say
if
you
mark
this
thing
is
malleable,
then
I
think
I
will
not
get
a
few
things.
I
think.
The
only
way
we
get
a
few
big
is
the
V
basic
cause
warnings
to
begin
with
yeah,
in
which
case
I
would
say,
like
on
input.
I
think
we
all
kind
of
agree
that
you
will
probably
get
warnings
that
we
don't
want
so
probably
input
its
thing.
We
agree
that
it
should
be
question
mark
and
then
form
it
is
more
I
think
to
debate.
J
E
N
P
R
B
B
C
C
R
C
E
E
F
C
B
C
Permit
constrain
generics,
the
consumer
gets
the
supply
pipe
arguments,
so
you
know
with
a
tuple
T
1
someone
we
could
start
the
to
train
string,
which
means
the
implementer
of
the
type
has
to
assume
at
every
incoming
generic
unconstraint.
My
going
unconstrained
generic
can't
be
no
fun
implementation
that
gets
relaxed
a
little
bit
with
attributes
that
are
being
worked
on
down
by
the
compiler
team.
Not
you
can
go
kind
of
override,
not
by
saying
with
afternoon
all
is
allowed
here.
Even
if
that's
the
generic
type
argument
is
not
nullable
in
vice-versa.
C
Pipe
is
pretty
hard.
We
added
a
lot
of
work
on
this
to
figure
out
like
what
could
be
null
and
what
couldn't
be
null
and
it's
complicated
by
the
fact
that
it's
abstract
and
there's
a
bunch
of
implementations.
But
this
is
one
of
those
types-
were
largely
assumed
that
all
the
implementations
were
ours,
and
so
we
weren't
particularly
concerned
about
some
devious
type
derived
pipe
turning
null
from
something
that
none
of
our
type
surgery.
C
F
C
C
C
O
C
G
C
S
S
B
S
C
A
C
C
That's
an
example
where,
like
you
know,
someone
could
even
with
their
own
tight
model
and
derive
from
these
things
and
return
null,
but
we're
sort
of
waving
our
hands
at
that
and
saying.
Well,
that's
that's!
Not
the
99.9
percent
cases
on
the
intent.
So
can
I
annotate
the
eye
with
the
attendant
insult.
A
Rapala
netting
right
because
you
really
can't
have
like
you,
I
mean
I
went
inside.
You
can't
have
it
both
ways
that
you
can
say
a
treated
reflection
as
this
abstract
object
more
like
in
code
against
not
knowing
whether
I
you
know
look
at
the
runtime
types
or
whether
you
know
something
from
metadata
and
then
have
inconsistencies
on
these
levels.
Right.
S
C
Interface
mapping
we
passed
over
5
above
is
the
one
I
mentioned
last
time,
an
interface
map
where
I
will
probably
come
to
it
would
interface.
Mapping
is
just
a
struct
width,
I
think
for
strings
in
it
or
for
reference
fields
in
it,
and
we've
made
those
all
non
nullable,
even
though
technically
they
could
be,
but
the
only
way
you
get
them
in
general
is
this
function.
C
H
C
C
C
A
D
F
A
E
C
A
C
A
C
A
C
S
H
H
H
C
C
A
A
C
C
A
B
B
A
To
be
clear,
this
is
not
somebody
guessing
question
mark
this.
Is
somebody
actually
put
an
implementation?
Have
the
code
compiled
so
like?
As
far
as
the
compiler
is
concerned,
this
is
a
consistent
role
of
you.
The
question
is
just
is
that
evolve?
You
debit,
like,
like,
we
basically
documented
what
the
code
does
at
this
point,
but
I
think
part
of
the
review
is.
Does
that
make
sense?
Because
before
that,
we
could
never
see
nullable
information
in
the
API,
but
you
would
have
to
look
at
what
will
the
method
actually
yeah.
C
C
We've
largely
defaulted
to
st.
Christopher
at
least
has
what
we
tried
to
do
is
happy
parameters
Express
what
was
allowed
because
we
work
some
coffee,
I,
don't
wanted
to
minimize
unnecessary
warning,
so
inputs
would
be
as
it
would
allow
as
much
as
possible
and
outputs
would
be
as
constrained
as
possible.
C
It
should
be
as
human
and
be
as
accurate
as
we
could.
That
said,
it's
a
little
bit
harder
I
think
we
will
find.
We
made
more
mistakes
on
the
input
and
we
turn
on
the
nullable
feature.
Everything
that
was
currently
written
with
reference
types
automatically
becomes
unknown
and
we
would
go
and
review
every
single
method
to
know
to
figure
out.
If
we
did
that's
a
question
mark
added
but
effectively,
it's
a
pulpit
to
no
question
mark
had
to
go.
Ask
questions
everywhere.
C
C
You
don't
like
the
question
mark
angle
bracket
question
mark
now.
C
H
F
C
C
A
C
B
G
H
I
guess
the
question
is
whether
or
not
like,
with
the
what
the
API
usage
pattern
would
be,
because
where
would
you
get
that
type
from
you
might
get
that
type
from
just
calling
one
of
the
other
get
type
members
which
returns
potentially
in
all
I?
Think
so,
if
you
called
that
and
then
pass
it
to
this
ad.