Faldt over dette i dag. Det har åbenbart altid eksisteret i C#, så det er åbenlyst mig, der er langsom i optrækket.
Man kan sætte en value type (eller en struct) til null ved at sætte et ? efter typen, fx:
Int32? i = null;
Dette er syntactic sugar for:
System.Nullable i = null;
Egentlig er det et super-simpelt trick. Hvis vi ser på noget IL for System.Nullable ser constructoren sådan ud (uden at jeg skal påstå at være IL-ekspert):
.method public hidebysig specialname rtspecialname
instance void .ctor(!T 'value') cil managed
{
// Code size 15 (0xf)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: stfld !0 valuetype System.Nullable`1::'value'
IL_0007: ldarg.0
IL_0008: ldc.i4.1
IL_0009: stfld bool valuetype System.Nullable`1::hasValue
IL_000e: ret
} // end of method Nullable`1::.ctor
Dvs. System.Nullable<T> er blot en klasse, der enkapsulerer en struct i det interne private felt ‘value’. Selve klassen er en reference type og kan derfor sættes til null. Det er således ikke value typen, fx Int32, der sættes til null, men det enkapsulerende objekt af typen System.Nullable<T>, der jo per definitioni kan være null. Enkelt, men smart. Den er skrevet bag øret:-)
0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.