我们可以将null值赋给变量的struct类型吗?
struct MyStruct
{
}
MyStruct var = null;
这可以在C#.net?
中使用如果没有?然后C#如何允许Nullable< T>结构类型的变量可以指定为null吗?
答案 0 :(得分:7)
是的,这是可能的,但你必须将你的变量声明为'nullable':
MyStruct? foo = null;
或
Nullable<MyStruct> foo = null;
答案 1 :(得分:2)
在C#中,struct
是值类型,而class
是引用类型。
struct
无法成为null
,因此您必须使用Nullable<T>
类将其包装成可以无效的内容。
这可以通过直接使用声明中的Nullable<T>
类来完成:
Nullable<MyStruct> foo;
或者使用Nullable<T>
的语法糖:
MyStruct? foo;
答案 2 :(得分:0)
结构不能为空,Nullable Types用于创建可为空结构的实例。
答案 3 :(得分:0)
关于以下问题:
...... C#如何允许Nullable&lt; T>结构类型的变量可以指定为null吗?
答案实际上非常简单:C#编译器知道Nullable<T>
并将其作为特殊情况处理以维持幻觉。
例如,这个:
int? a;
if (a != null) ...
实际上汇编成这个:
if (a.HasValue) ...
几乎所有这些魔法都由编译器处理 - .NET主要将Nullable<T>
视为另一个ValueType。我记得阅读(最有可能来自Eric Lippert's blog),在开发过程的后期,他们发现了一个边缘问题,而单独的编译器技巧无法解决这个问题。运行时人员同意进行一次更改,将Nullable<T>
视为特例。不幸的是,我不记得特殊情况是什么,我再也找不到参考。
请查看本文了解详情(尤其是Lippert的第二条评论): http://blogs.msdn.com/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx