Ниже приведен код, демонстрирующий, что я не могу объявить и инициализировать тип структуры как ноль. Тип Nullable является структурой, так почему я могу установить для него значение null?
Nullable<bool> b = null;
if (b.HasValue)
{
Console.WriteLine("HasValue == true");
}
//Does not compile...
Foo f = null;
if (f.HasValue)
{
Console.WriteLine("HasValue == true");
}
Где Foo
определяется как
public struct Foo
{
private bool _hasValue;
private string _value;
public Foo(string value)
{
_hasValue = true;
_value = value;
}
public bool HasValue
{
get { return _hasValue; }
}
public string Value
{
get { return _value; }
}
}
На вопрос дан ответ (см. Ниже). Чтобы уточнить я выложу пример. Код C #:
using System;
class Program
{
static void Main(string[] args)
{
Nullable<bool> a;
Nullable<bool> b = null;
}
}
производит следующий IL:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] valuetype [mscorlib]System.Nullable`1<bool> a,
[1] valuetype [mscorlib]System.Nullable`1<bool> b)
IL_0000: nop
IL_0001: ldloca.s b
IL_0003: initobj valuetype [mscorlib]System.Nullable`1<bool>
IL_0009: ret
} // end of method Program::Main
a и b объявлены, но инициализируется только b.