mga*_*mer 7 .net c# null nullable value-type
在C#3.0中,您可以为int分配null吗?type(在CLR int?中是一个struct):
int? a = null;
Run Code Online (Sandbox Code Playgroud)
但是当你定义一个自定义结构时:
struct MyStruct
{
}
Run Code Online (Sandbox Code Playgroud)
编译此代码时出错:
MyStruct a = null;
Run Code Online (Sandbox Code Playgroud)
错误如下:
Cannot convert null to 'Example.MyStruct' because it is a non-nullable value type
Run Code Online (Sandbox Code Playgroud)
int?是CLR中的结构,它在某种程度上违反直觉,我们可以为它分配null.我想null被隐式地转换或装箱到certian int?表示空值的值.它是如何完成的?如何以可以执行该行的方式扩展MyStruct:
MyStruct a = null;
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 20
这是因为int?实际上是速记Nullable<int>.你也可以为你的类型做同样的事情:
MyStruct? a = null;
Run Code Online (Sandbox Code Playgroud)
null只能隐式转换为可空类型,这意味着任何引用类型或任何可以为null的值类型 - 后者Nullable<T>对某些类型意味着T.
请注意,这种转换能力null实际上是一种语言特性 - 编译器正在转换它:
int? a = null;
Run Code Online (Sandbox Code Playgroud)
成
int? a = new int?();
Run Code Online (Sandbox Code Playgroud)
它们的含义相同 - 基本上,可空值类型的"null"值是一个HasValuefalse,默认情况下为false.它与空引用不同 - 虽然像这样装箱空值会导致空引用.
(这是跨越语言,库和CLR边界的功能的一个示例.库部分非常简单,CLR部分仅与装箱和拆箱有关 - 但在语言中提升操作员等方面有很多.)
| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |