我们可以给结构类型的变量分配空值吗?C#中的可空类型转换?
struct MyStruct
{
}
MyStruct var = null;
这是可能的在C#.net?
如果不是?那么C#如何允许Nullable < T> struct类型的变量可以分配为空?
我们可以给结构类型的变量分配空值吗?C#中的可空类型转换?
struct MyStruct
{
}
MyStruct var = null;
这是可能的在C#.net?
如果不是?那么C#如何允许Nullable < T> struct类型的变量可以分配为空?
对主题:
... C#如何允许Nullable < T>变量的结构类型可以分配为空?
答案其实很简单:C#编译器知道Nullable<T>
并将其作为特殊情况处理以维持错觉。
例如,这样的:
int? a;
if (a != null) ...
实际上编译成这样:
if (a.HasValue) ...
几乎所有的这个魔法是由编译器处理 - .NET将主要观点Nullable<T>
只是另一种值类型。我记得阅读(最有可能从Eric Lippert's blog),在开发过程的后期,他们发现了一个单独的编译器技巧无法处理的边缘问题。运营团队同意做出一个处理Nullable<T>
作为特例的更改。不幸的是,我不记得什么特殊情况,我找不到参考了。
请查看这篇文章的详细信息(尤其是第二个评论这是利珀特): http://blogs.msdn.com/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx
是的,这是可能的,但你必须声明你的变量为“可空”:
MyStruct? foo = null;
或
Nullable<MyStruct> foo = null;
hello可空
@dinesh。事实上,编译器不能接受null为非空类型。可空
的Structs不能为空,Nullable Types用于创建可空结构的情况下, 。
在C#中,struct
s是值类型,而class
es是引用类型。
struct
s不能被制作null
,所以你必须使用Nullable<T>
类将它包装成可以无效的东西。
这是通过直接使用在声明中Nullable<T>
类完成:
Nullable<MyStruct> foo;
或者通过使用Nullable<T>
的语法糖:
MyStruct? foo;
hello可空
甚至提出7个问题,他还没有学会如何使用格式化后。 – Shoban 2010-02-12 09:06:02
hello可空是结构类型complier如何接受null为这种类型?为什么不接受相同的结构类型的变量? –
dinesh
2010-02-12 09:32:35