►
From YouTube: .NET Design Review: Nullable Annotations
Description
We're reviewing nullable annotations for System.Runtime and System.Runtime.Extensions.
A
All
righty,
so
how
do
you
want
to
do
this?
Do
you
want
to
just
go
top
to
bottom
I?
Guess,
that's
probably
easiest
way
for
us
to
do
right,
yep,
yeah,
I
think
that's
so
tough,
well
an
opportunity
to
review
everything,
because
everything
that
is
currently
not
marked
at
the
question
mark
it's
implicitly
not
now
it
just
realize
it
would
have
been
really
helpful
if
my
tool
were
to
find
out
the
reference
typing.
I
think
these
are
all
the
types
of
they're
fine.
A
Here
sure.
E
G
C
C
A
G
C
Like
basically
tell
the
compiler
somehow
actually
activate
or
something
that
this
specific
thing
is
special
and
like,
but
what
you
want
to
compile
to
do
you
want
in
vitamin
C,
they're
trained
men,
you
never
know
know
so,
like
generally
like,
like
when
someone
checks
in
the
intellisense.
That
would
show
us
no
Morrible
but
like
with
this
one
case
where
someone
is
not
movable
of
something,
then
I
would
actually
make
the
compiler
to
treat
it
as
something
this
can
actually
do.
So
what
do
you
do
if.
A
Did
type
of
tea
yeah
no
I,
think
honestly
it
so
the
way
I've
seen
this
right.
So
let's
say
I
call
create
instance
right:
mind
you
and
mining
Eve
understanding
is
there's
never
returns,
not
because
it
will
just
blow
up
with
the
type
dozen
exits
right,
so
I
know
use
this
thing
like
a
lot
of
gives
me
squiggles
I'm,
like
what
and
then
I
read
the
documentation
and
says,
give
me
another
scope
of
another
reference
type.
Then
I'm
like
well
in
my
case
I
know
for
a
fact:
it's
never
the
case.
That
is
another
bow.
A
Away
or
debugger
sorted
or
whatever
it
is
right,
but
I
think
the
problem
is,
if
you
do
more
special
handling,
then
I
think
the
question
is
just
what
you
want
to
do
right.
I
mean
the
case
is
that
the
compiler
can
do
to
mystical
II,
look
at
your
code
and
decide
with
certainty
that
this
is
not
the
case.
It's
probably
not
being
very
high
for
some
of
the
methods
and
the
other
problem
is
that
just
makes
the
whole
feature
extremely
complicated.
A
Right
and
now
the
question
is
now:
how
much
special
occasion
came
to
compiler
realistically
do
when
we
have?
You
know
how
many
you
guys
did.
We
have
any
I,
think
twelve
thousand
or
something
like
so
like
that's
just
justin
runtime,
let's
assume
on
time.
Extensions
is
open.
Their
object,
control,
isn't
the
struct.
F
C
A
G
A
E
C
G
And
I
totally
understand
that
perspective,
but
from
my
perspective,
if
we're
gonna
start
waving
our
hands
to
say
well,
just
this
could
be
null,
but
in
the
common
case
it
won't
be
so
we're
not
gonna,
put
a
question
mark
right
that
entirely
deep
values,
the
feature
it
may
as
well
just
take
it
off.
Yes,.
A
I
think
also
that
it
depends
on
the
API,
I
think
to
string
I
felt
more
strongly
towards
not
having
a
question,
my
purely
because
you
call
it
over
the
place
right,
but
these
are
some
of
the
API.
Is
you
call
all
over
the
place
right
so
like,
even
if,
even
if
you
have
to
bang
it
away?
Well,
let's
pull
one
of
your
more
complicated
components
that
do
things
like
this,
and
so
you
probably
want
to
think
about
that
anyways.
So
I
think!
That's
that's!
Why
we'll
be
okay
with
that
I
need
to
strain.
G
A
A
Variant,
so
basically,
what
this
tool
does
it
aligns?
Api
is
based
on
logically
the
dollar
fee,
but
will
align
them
regardless
of
question
mark
or
not
question
mark,
because
I
don't
change
the
idea
of
the
API
and
then
it
will
basically
generate
the
tokens
for
left
and
right
and
then
just
dip
them
so
that,
logically,
the
question
mark
should
have
showed
up
as
it
did.
I
suspect.
What
handed
up
happening
is
that
whatever
module
I
have
locally
already
must
have
had
the
question
mark
in
it
and
non
tell
you
why
that
is.
A
A
G
A
G
A
But
I
think
we
generally
said
like,
depending
on
the
case,
you
might
actually
accepted
it.
You
know
base
and
customer
feedback
right,
so
I
think
eventually,
I
would
get
to
the
point
where
we
have
high
confidence
in
our
annotations
and
don't
turn
them
anymore,
but
until
we
have
someone
one
might
achieve
over
have
to
tweak
them.
H
G
E
H
A
I
mean
none
of
these
are
fighting
breaking
changes
in
practice,
but,
like
the
the
thing
is,
though,
you
know
beef,
you
know
before
this
feature.
We
couldn't
express
malleability
right,
so
I'm
100%
certain
we
someone
broken
invariant
right.
We
just
said:
well,
it's
not
represented
in
the
type.
So
it's
fine
right,
like
it's
more
like
this
gray
area,
behavior
changes
that
may
or
may
not
affect
you,
and
so
the
way
I
see
it
is
that
their
notations
just
expressed
that
a
little
bit
better.
But
in
the
end
of
the
day,
is
that
the
same
discussion.
A
A
H
A
G
G
A
Oh
so
you're
not
calling
actually
the
host
you're,
basically
just
saying
well,
if
it's
hosted,
then
I
just
don't
have
an
entry
assembly.
So
there's
nothing.
I
can
do
that's
the
current
implementation,
at
least
so.
In
order
for
us
to
fix
that,
you
would
have
to
have
some
host
extension
point
where
the
host
came
to
turn
the
base
directory.
H
A
G
Is
a
way
house,
so
it
looks
like
there's
a
some
app
context
based
directory
that
can
be
said
least.
According
to
this
comment
and
that'll
be
used.
If
a
host
sets
it
if
a
host
doesn't
set
it,
then
we
hit
this
get
entry
assembly
thing.
So,
basically,
if
the
host
doesn't
set
it
and
you're
hosted
you
get
no.
A
G
A
I
think
this
kind
of
goes
like
if
you'd
see
this
first
pass
more
as
an
you
know,
we
actually
represent.
What's
going
on
and
I
think
the
other
question
is
like:
should
this
ever
be
done
right
or
should
we
just
fix
the
code
that
this
corner
case
just
can't
occur
anymore,
because
I
mean
like
how
much
code
have
we
written?
That
assumes
based
directly
to
actually
be
there?
Oh,
it.
H
A
That's
what
I'm
saying
I
think
I
think
like
if
you
look
at
the
API
right
now
we're
just
document
what
actually
happens
right
but
but
I
think.
The
other
question
we
should
ask
ourselves
is
like:
should
we
just
fix
the
corner
case,
so
you
always
have
a
valid
based
a
rectory,
because
practically
speaking,
you
have
it.
You
just
can't
compute
it
which
is
more
like
if
you
think
of
it
as
a
lacking
feature,
or
you
know
a
bargain
or
extension
I.
H
A
D
A
Which
case
you
would
say,
the
browser
I
mean
that's
more
like
the
expression
for
the
file
system
in
the
browser,
but
if
they
have
one
you
could
assume
you
could
basically
say
well
hole
use
base
directory,
usually
by
for
loading
other
stuff,
but
you
would
say
well
either
you
can't
load
any
other
stuff,
in
which
case
the
thing
they
were
matters
where
you
say
well,
it's
whatever.
The
logical
route
is
for
your
file
system
inside
of
a
browser
which
might
be
somewhat
arbitrary.
You
know
way
to
live.
It
I
think.
G
A
A
G
A
G
There
were
a
bunch
of
times
when
we
were
going
through
all
these
adding
these
annotations,
where
you
know
I
see
a
PR
like
I
think
Miriam
sent
one
and
I
was
like.
How
could
this
possibly
be?
No,
why
are
you
making
the
snow
and
then
yon
chimed
in
well?
It
says
in
the
docs
right
here
this
could
be
cobble
yeah
I've,
never
protected
myself
against
that
possibility.
Yeah.
A
K
K
H
G
Does
raise
an
interesting
question,
which
is
let's
say
we
would
say
we
have
argument
exception.
You
know,
I,
do
kind
of
I
think
it
was
Tareq's
point
like
well.
If
you
don't
have
a
message
in
an
ER
exception,
you
should
be
calling
the
shortest
possible
constructor.
So
would
we
want
to
push
people
towards
that
by
even
though
these
technically
can
take
no
pretending
they
can't?
The
flip
side
is,
if
you
do
that,
people
that
are
passing
know
are
gonna
get
four
names
or
people
that
pass
things
when
the
compiler
can't
tell
are
gonna
get
warnings.
A
You
enter
in
overloads
that
I
look
exactly
like
this
one.
We
don't
have
to
change
any
more.
You
basically
have
you
know
incompatible
shapes
if
you've,
all
right,
where
eventually
you
run
into
problems
where
adding
an
overload
gets
really
complicated,
because
the
question
is
now,
what
will
all
existing
code
compile
or
I'll
be
accidentally
binding
against
something?
So
basic
here
when
you
say
argument
null,
except
you
an
exception,
you
pass
not
common
are
already
not
great
right.
I
mean
for
me
for.
C
Me,
the
point
would
be
like
20
or
direct
for
this
class
and
you
don't
kamon
it
personal
or
not,
and
then
you
just
run
out
whatever.
A
G
K
G
I
think
the
the
end
goal
that
everyone
for
this
whole
novel
feature
the
end
goal.
That
I
think
everyone
would
agree
on
is
trying
to
reduce
a
particular
class
of
exceptions
and
failures
that
people
have
in
their
applications
and
doing
it
via
static
analysis
at
compile
time,
and
that
means
the
compiler
helps
you
to
understand
how
nulls
flow,
through
your
code
and,
if
you,
and
that
means
that
any
library
code
that
might
give
you
back
something
that's
null-
has
to
tell
you
that
and
anything
that
allows
you
to
accept.
G
That
can
accept
null
has
to
tell
you
that
the
compiler
factors,
all
that
information
in
where
we
end
up
disagreeing
and
sometimes
I,
think
I'm
sort
of
at
one
end
of
the
spectrum
and
mads
is
probably
at
the
other
end
of
the
spectrum,
is
how
quote
quote
accurate?
Do
our
annotations
need
to
be
and
I've
erred
on
the
side
and
I
know,
I've
had
disagreements
with
Santi
and
Christoph
and
others
as
well.
G
I've
erred
on
the
side
of
we
should
be
as
accurate
as
possible
if
it's
possible
that
something
could
in
any
situation,
hand
you
back
null.
We
should
say
so.
The
flip
side
of
that
is,
it
means
you're,
probably
going
to
get
more
warnings
in
your
consuming
codes
than
you.
Otherwise
would
so.
My
goal
hasn't
been
to
reduce
the
warnings
that
people
get
in
their
code.
It's
if
someone
enables
this
feature,
it's
tell
them
every
possible
place
where
it's
they
might
even
you
know,
have
a
null
issue,
and
that
may
be
the
right
approach.
G
A
I
like
about
it,
though
originally
I
was
more
on
the
mats,
Kempe
or
saying
you
know,
let's
make
it
so
that
we
don't
basically
drown
the
consumer
in
warning
messages,
because
it
kind
of
results
in
the
FX
code
for
now
and
people
just
turn
it
off
entirely
because
they
get
frustrated
with
it.
But
what
is
nice
about?
It
is
that
if
you
have
earring
on
the
a
let's
just
document
reality
we
will
find
API.
Is
that
arguably
have
a
you
know
a
question
of
a
contract?
Right,
like
you
know,
or
should
does
actually
be
now?
A
Should
we
make
sure
we
never
returned
out
I
like
which
is
kind
of
the
base
to
back
to
the
discussion
right
and
if
we,
we
basically
limey,
say
yeah,
you
can
pretend
it's
not.
Now
then
you're
effectively
sweeping
the
problem
under
the
rug,
when
in
fact,
you
probably
won't
either
either
you
want
to
say
no,
you
have
to
handle
all
you
want
to
say.
Okay,
let's
make
sure
we
actually
don't
produce
enough.
G
Yeah
and
then
yeah
this
there's
an
effort
currently
underway
sort
of
a
DCR
to
add
a
bunch
of
attributes
that
allow
us
to
more
finally
Express
the
sort
of
know
behavior
of
these
methods
and
that's
an
effort
to
alright
well,
we've
attributed
we've
annotated
everything
sort
of
a
very
conservative
way.
Can
we
then
use
these
attributes
to
be
more
specific
and
eliminate
warnings
in
cases
where
we
can
actually
help
the
customer
understand?
G
Well,
even
though
we
say
this
that
you
know
this
returns
no
you're
going
to
be
fine,
given
the
inputs
that
you
provide
to
the
function
right
and
so
that
sort
of
sets
our
expression.
That's
what
it's
about
all
right,
we'll
let
let's
help
the
customers
safely
drive
down
the
number
of
warnings
they
received
right
so.
K
What
I'm
hearing
here
is
like,
then,
we
should
do
the
right
thing
in
our
code,
regardless
of
the
warning,
and
we
assume
that
these
attributes
is
going
well
at
some
point
produces
warnings,
but
we
had
some
cases
the
way
I
see-
and
this
is
my
problem.
What
I
mean
like
going
to
every
case
like
this
and
then
like?
It's
not
there
I
say
like.
G
We
should
be
alright,
I
say
in
general.
That
is
the
approach
that
we've
taken.
There
are
a
couple
gray
areas
where
we
had
to
make
some
judgment
calls
so,
for
example,
one
of
the
biggest
issues
with
this.
This
feature
in
general
is
strux,
and
you
know
if
you
say
that
if
you
have
a
reference
field
on
a
struct-
and
you
say
it's
non
nullable
you're
lying
because
someone
can
always
walk
up
to
any
struct
and
say
default
of
T,
and
then
every
reference
field
on
there
is
going
to
be
known.
G
G
But
there's
like
this
interface
map
struct
in
reflection,
where
no
one
ever
creates
one
of
those
things
using
default
interface,
but
they
only
ever
get
them
unless
they're
doing
something
weird
out
of
one
of
our
reflection,
api's,
which
will
not
return
to
fault
initialize
things,
and
so
there
there
are
a
bunch
of
reference
fields
on
that
and
we
didn't
make
the
we
made
those
non
nullable,
and
so
you
know
there
are
these
gray
areas.
99%
of
stuff
is
very
clear
and
there's
this,
like
1%
gray
area
we've
had
to
make
some
judgment,
calls.
A
But
but
I
wanna
add
one
thing,
sir
I
think
the
other
thing
to
say
is
like
if
you
look
at
existing
code,
that
is
already
in
production,
I,
don't
think
turning
off.
This
turn
on
this
feature
will
find
a
torn-up
box.
You
probably
find
bugs
no
matter
how
you
know
robust
Rico
phases,
but
there
will
always
be
like
some
corner
cases,
but
but
there's
a
lot
of
like
maybe
somewhat
false
positives,
because
the
compiler
cannot
actually
understand
your
code
at
the
level
where
it
actually
executes
but
I.
A
A
The
compiler
already
tells
you
all
you're,
just
dotting
into
something
that
could
be
now,
but
you'll
probably
find
this
bug
immediately
when
you
actually
run
it
for
the
first
time,
but
you
don't
have
to
do
that
anymore,
but,
like
I,
think
there
is
some
accumulative
effect
of
productivity
savings
that
just
come
from
when
you
actually
evolve
in
code
or
you're
writing
that
new
code.
This
is
where
this
feature
is
I,
think
really
shining
but
I
think
for
existing
code.
I!
Don't
expect
that
this
is
going
to
make.
You
know
your
life
substantially
better
right.
A
It
will
probably
make
your
life
somewhat
worse
in
the
beginning,
because
you
have
to
accommodate
the
future,
but
then
eventually,
as
you
evolve
in
your
co-pays,
you
actually
have
payoffs.
So
in
other
words,
if
I
have
an
existing
app
I'd,
barely
touch
I
would
never
activate
the
feature.
There's
like
very
little
gate,
valuable
to
be
to
be
gained
by
that.
So.
K
A
K
A
K
A
Think
you're,
a
new
source
files
I
think
just
enable
the
newest.
So
as
far
as
the
video
will
not
be
very
high,
like
the
basically,
the
problem
is,
is
Christoph
said,
but
you
have
to
annotate
your
existing
code
base
to
actually
flow
information
as
a
meaningful
way
right.
This
interaction
between
the
noose,
waffle
and
the
other
and
in
the
other
system,
I,
would
generally
say
to
me
when
I
say
code,
existing
code
I
really
refer
to
the
project
as
a
whole,
and
you
should
make
this
on
a
project-by-project
decision
me.
A
K
A
To
make
a
decision,
how
often
do
you
touch
this?
If
the
answer
is
very
rarely
I
would
not
bother
at
all.
If
this
is
an
if
it
is
that
your
production
app
that
you're
actively
evolving,
then
you
know
take
a
point
in
time
where
you
migrate,
this
to
be
inaudible,
do
which
file
by
file,
so
we
actually
drive
down
on
the
ones
for
your
project
and
once
you're
done
and
able
it
for
the
project
and
remove
all
the
palpable
file
across
all
your
sauce.
A
But
it's
just
a
in
order
for
you
to
actually
make
progress
without
immediately
drowning
in
10,000
warnings.
That's
what
you
do!
It
fall
by
file,
but
that
is
just
the
the
process
itself,
like
eventually
your
when
you're
done.
You
should
be
at
the
point
where
it's
enable
for
the
whole
project.
You
should
not
have
this
as
medicines.
A
A
I
think
the
other
thing
is
like
we're:
the
first
project
that
is
not
hello
world,
but
he
actually
tried
this
right.
I
think
there
wasn't
folks,
I've
tried
it,
but
they
didn't
have
enough
time
to
actually
drive
the
annotations
to
all
their
co-pays
I.
Think,
as
we
are
finding
more
code
bases
where
we
do
this,
where
everything
a
little
bit
more
about.
Okay,
whatever
works,
what
doesn't
work
but
I
think
we
already
have
a
pretty
good
understanding
of
what
worked
for
us
all
right.
Let's
keep
doing,
because
we
have
only
like
12,000.
A
Rosen
did
so
Jared
had
this
goal
that
base
today
the
Rosen
team.
They
generally
are
very
aggressively
doctoring
their
own
features,
but
the
problem
is
that
this
is
not
a
feature
that
you
can
just
you
know
surgically
add
some
where
you
actually
have
to
go.
The
whole
file
and
some
of
the
balls
and
files
are
ginormous,
so
it's
not
easy
to
enable
and
they
have
a
lot
of
stuff
where
the
type
itself
is
ginormous.
M
G
A
C
F
F
G
But
this
gets
into
weirdness
in
the
implementations
like
VM.
Implementing
in
generic
method
is
weird
because
the
compiler
forces
you
to
assume
that
every
T
that
comes
in
might
be
null
because
it
doesn't
know
whether
it
was
going
to
be
constructed
with
a
nullable
or
non
knowable
type.
But
then,
when,
when
you
return
ax
T,
you
can't
return
null.
Because
again
it
doesn't
know
whether
it
might
have
another
done,
though
so
it
has
to
assume
not
know
for
results
and
know
for
inputs.
G
It
makes
sense
this
feature.
It's
a
really
interesting
one,
because
it's
taken
a
ton
of
work
across,
especially
the
language
came
on
our
team,
but
on
us
as
well-
and
there
are
it's
like
most
of
the
features-
are
like
a
hundred
percent
buttoned
up,
you
know
any
feature.
The
languishing
does
end
to
end.
It's
like
really
polished
this
one.
There
are
some
pretty
big
gaps
like
you
know.
If
I
say
new
string
already
with
the
novelty
journal,
that
is
an
array
of
non
null
strings
right,
except
what
I
just
said,
new
string
array.
A
G
G
Some
of
these
are
going
to
be
impacted
by
new
entrants.
Yeah
so
example
the
find
method
that
you
just
scrolled
past
that
that
returns
a
T
yeah.
This
is
so.
This
is
where
the
I
view
scroll
your
cursor,
like
five
lines
up
or
yeah
like
right
there.
This
is
one
of
those
interesting
cases
where
we
at
the
moment.
We
lack
the
ability
to
express
the
fact
that,
regardless
of
whether
you
use
it
nullable
or
non
malleable,
t
if
find,
doesn't
find
what
it's
looking
for.
G
It
will
return
null
right,
it'll
return
to
fault
of
T
rather
right,
and
we
have
no
way
at
the
moment
of
expressing
that
with
the
new
attributes,
there
will
be
a
maybe
null
attribute
on
the
return
type
here.
So
basically
is
saying,
even
if
you,
even
if
you
pass
in
a
non
malleable
T,
this
still
might
return
them.
Do.
A
G
Think
that's
the
intent
it
needs.
You
know
in
these.
In
the
extent
of
time
it
would
say
no
matter
what
you
pass
in,
because
it
was
maybe
not
on
the
T
it'll
put
a
question
mark
on
the
result.
Oh
really,
she
will
show
up
is
there
and
that
will
that's
the
intent
like
that
the
attributes
would
sort
of
manifest.
You
know
reason
whatever
in.
G
A
G
G
And
generally
with
I,
don't
know
how
all
the
attributes
are
gonna
be
reflect
like
some
of
them.
There
isn't
a
good
way
with
question
marks.
You
know
of
expressing
what
they
mean
so
I,
don't
entirely
know
when
it's
gonna
look
like
an
intelligence,
anything
that's
codependent,
it's
probably
exact
all
the
the
meat
you
know
not
know
when
or
not
know.
If
not
know,
all
those
attributes
are
gonna
be
weird.
E
E
G
A
G
A
C
A
A
A
A
C
G
G
E
G
A
H
H
Comparison
is
a
delegate
right
and
all
the
other
places
we
take
delegates.
We
don't
accept
no
right
like
predicate.
When
we
take
predicates,
we
don't
we
don't
take
no
there,
so
we
kind
of
feels
like
that
should
be
consistent
with
other
delegate
usages
so
that,
if
you
want
to
make
them
consistent,
the
only
way
to
make
them
consistent
would
be.
You
can't
take
a
null
I
compare.
G
A
E
G
This
one's
this
one's
a
little
painful
but
I
it
because,
especially
because
like
when
you
call
a
method
that,
like
a
try,
get
method
that
has
an
array
segment
as
an
out
if
it
returns
false.
That
array
segment
is
generally
a
default
array
segment.
If
you
tried
to
access
its
array,
it's
gonna
be
null.
G
G
A
G
G
M
G
I
G
G
M
G
G
C
C
D
A
K
C
A
F
A
E
M
You
know
ask
one
more
general
question:
joy,
I'm,
regarding
binary
civilization
here,
have
you
thought
about
the
cases
where
you
see
you
love
something
and
something
can
be
now,
but
you
wouldn't
expect
it
to
be
now
because
it
because
you
could
modify
the
payload
or
on
doesn't
framework,
it's
different
yeah.
G
You
know
anything
I
think
we
you
know
for
those
kinds
of
things.
We
assume
that
either
the
implementation
of
the
DC
realization
is
gonna
balk
at
a
bad
payload
that
over
as
Christoph
was
saying,
we
basically
say
you
know
what
that's
that's
just
like
using
unsafe
code
to
modify
something.
If
the
implementations
do
serialization
isn't
validating
that
it
was
correct
and
you
modified
it
using
effectively.
Unsafe
code
is
you're
modifying
the
payload.
Well,
that's
on
you
static
analysis.
C
A
G
So
this
is
another
one
of
those
special
cases
where
we
had
a
sort
of
gray
area
where,
in
theory,
someone
could
override
message
on
exceptions
in
general,
like
it's
a
virtual
method
for
virtuals,
you
could
override
it
and
in
return
whatever
you
want,
including
null,
but
we
look
through
all
of
our
exceptions
and
none
of
them
return
null
from
message
and
there's
no
point
in
returning
null.
You
can
always
just
returned
based
on
message
whatever.
What,
if
you
created
but.
K
G
G
So
if
for
bad
image,
format
exceptions
specifically,
if
you
pass
in
a
null
message,
then
it
has
its
own
internal
message
that
it
uses
that
may
or
may
not
incorporate
the
file
name
with
the
invention.
Question
anyhow
it.
But
this
is
one
of
those
gray
areas
where
for
virtuals
in
general,
we
have
this
problem.
In
theory,
every
single
virtual
on
every
type-
that's
not
sealed,
should
return
nullable,
but
that
wouldn't
be
particularly
useful
and
it's
not
really
accurate
because
from
an
intent
perspective
message
should
never
return
null
and
across
all
the
code
we
looked
at.
G
G
K
K
G
A
G
B
K
G
G
Yeah,
there's
that
big,
please,
like
yeah,
I,
think
this
is
why
you
are
not
duplicating.
G
A
G
B
G
A
E
A
A
A
A
A
G
C
I
G
G
A
D
E
G
Because
we
don't
have
the
ability
to
say
this
will
be
no.
This
could
be
null
if
and
only
if
thrown
by
and
failure
is
true.
We
can
know
right
right,
yeah
I
mean
unless
you
make
it
a
condition
like
this.
So
if
you
look
at
the
first
overload
of
create
delegate
compared
to
the
second
one,
the
first
one
just
calls
the
second
one
with
throw
and
bind
failure.
G
True,
and
that's
why
this
one
doesn't
return
an
unknowable
delegate,
the
second
one
which
takes
the
option
of
having
thrown
by
a
failure,
be
false
needs
to
be
able
to
return,
though,
can
be
expressive
of
our
bank
today.
Holding
on
right,
no,
we
would
be
an
attribute
about
allows
you
to
basically
say
kind
of
we're,
adding
a
not
null
when
attribute
yeah.
We
would
need
like
the
results
we
have.
We
haven't
not
know
when
that
refers
to
the
return
value.
G
G
A
G
D
D
F
F
F
A
M
A
I
D
D
A
G
I
mean
in
truth,
a
lot
of
these
Streng
returning
methods
that
are
diagnostic.
You
just
pass
them
to
something
else
that
prints
it
out.
Debug
got
it
debunked,
discerned
or
console
dot,
write
line
and
all
of
them
except
string,
question
mark
and
ignore
nulls.
So
in
most
of
these
cases
it
doesn't
really
matter,
but
you
know
it
could.
M
C
A
G
G
We
need
new
attributes
to
express
something
or
the
compiler
special
case,
something
there
are
any
couple
places
the
compiler
is
likely
go
in
a
special
case
like
interlock
compare
exchange,
equality,
things
would
be,
are
difficult
to
express
with
attributes
and
very
kind
of
complicated
rules,
but
the
compiler
might
a
special
case,
so
we
might
find
something
like
that
would
need
to
get
into
the
list.
So
we.
A
A
G
A
G
An
action
in
funk
well,
it
would
be
difficult
to
do
because
you
can't
overload
unknowability,
but
we
would,
you
know,
need
to
come
up
with
some
other
signature
yeah,
but
liquid
these
and
in
order
to
be
able
to
say
these
will
never
be.
No.
We
didn't
do
that.
My
guess.
We
can
look
at
it
in
the
future.
Yeah.
A
G
G
Can
it
doesn't
make
much
sense,
so
this
is
a
place
where
we
could.
We
could
choose
to
say
well,
the
intent.
Is
you
don't
pass
null
here
if
you're
passing
no
you're
probably
doing
something
wrong,
but
GC
keepalive
doesn't
actually
do
anything
other
than
serve
as
a
marker
to
say,
like
basically
keep
this
thing
moving
by
the
stack.
G
Suppress
our
lives
actually
throws
if
Mel's
taking,
because
it
actually
has
to
modify
us
to
kind
of
touch
the
object
itself
well.
Keep
a
life
has
nothing
to
do
with
anything
on
the
object
itself.
Keep
alive
just
says
pretend
this
thing
is
still
rooted.
Suppress
finalize
actually
has
to
go
into
the
object
in
the
mutated
right.
What
did
you
see?
You
wouldn't
mark
something
inside
the
object.
It's
a
bit
on
my
run
after
keep
alive,
I
think.
A
A
G
I
mean
I,
said
I'll
call
to
GC
ducting
polite
null
is
useless,
so
I
mean
we
could
choose
to
say
this
doesn't
make
any
sense
accepting
and
all,
even
though
it's
perfectly
happy
accepting
null
and
that's
it
I
mean
that's.
One
of
those
judgment
calls
because
I'm
totally
fine
with
that.
If
people
want
to
do
that,
I
think.
E
K
K
A
A
D
D
D
A
C
A
A
A
J
A
K
A
A
A
A
A
A
B
A
D
K
F
B
C
F
A
G
Yeah,
so
the
theory
that
we're
going
operating
under-
and
we
could
be
wrong-
is
that
there
actually
won't
be
all
that
many
warnings
because
in
general
either
you're
calling
to
string
on
a
specific.
You
have
a
variable
of
a
specific
type
and
when
you
over
I
to
string,
you
can
constrain
it
further.
So
most
overrides
of
two
string
returns
string,
not
string
question
mark,
and
so,
if
you
had
a
type-
and
you
wanted
to
say
parse
the
result
of
two
string,
there's
a
really
good
chance
that
it's
not
actually
returning
a
string.
G
Question
mark
is
returning
string.
If
you
have,
if
you
have
object
and
you're
calling
to
string
you're,
probably
not
parsing,
it
you're,
probably
passing
it
to
something
else,
to
work
with
you're
passing
it
to
string.
Can
cap
you're
passing
it
to
console.writeline
you're,
passing
it
to
whatever
all
of
which
except
string
question
mark
so
you're,
probably
not
getting
not
getting
it
warnings
they
are
either.
So
the
places
where
you
get
warnings-
and
there
are
some-
are
limited.
C
C
D
D
M
A
A
A
K
A
G
A
A
A
G
K
G
E
D
G
G
G
G
G
B
G
A
A
A
G
Between
questions,
it
should
work
the
way
you
expect
it
to
work.
If
you
have
a
base
a
parameter
on
a
base,
virtual
that
accepts
string,
you
should
be
able
to
override
it
to
accept
string
question
mark.
If
you
have
return
value
that
returns
string,
question
mark,
you
should
be
able
to
override
it
to
return
string,
but
that
also
goes
to
casting
of
generics
right.
G
A
G
C
D
G
F
K
A
K
D
A
F
A
I
need
I
need
to
book.
I
need
to
ask
her
one
where
the
Jemez,
who
has
something
short,
that
they
need
to
get
unblocked
by
and
then
either
we
either.
We
spend
the
second
hour,
but
there's
also
another
API
review
that
the
WinForms
guys
asked
me
to
do
so.
I
probably
have
to
I'm.
Can
you
get
away
with
just
accused.