Max*_*ich 21 c# null nullable value-type reference-type
有人可以请你解释为什么调用ToString()一个空的引用类型会导致一个异常(在我看来这是完全合理的,你无法调用任何方法!)但是调用ToString()一个空的Nullable(Of T)返回String.Empty?这对我来说是一个惊喜,因为我认为这种行为在各种类型中都是一致的.
Nullable<Guid> value = null;
Stock stock = null;
string result = value.ToString(); //Returns empty string
string result1 = stock.ToString(); //Causes a NullReferenceException
Run Code Online (Sandbox Code Playgroud)
Ada*_*rth 20
Nullable<T>实际上是一个struct有一些编译器支持和实现支持,表现得像一个null没有实际存在null.
您所看到的是实现之间的冲突,允许您自然地将其null视为任何其他引用类型,但允许方法调用发生,因为Nullable<T>它实际上不为null,其中的值为null.
在视觉上它看起来应该不起作用,这只是因为你无法看到在后台为你做了什么.
当您在空引用类型上调用扩展方法时,可以看到其他此类视觉技巧...调用有效(反对视觉期望),因为在引擎盖下,它被解析为静态方法调用,将您的null实例作为参数传递.
Nullable是一个值类型和赋值,null用于使用Value=null和初始化它HasValue=false.
此外,Nullable.ToString()实现如下:
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
所以你所看到的是预期的.
| 归档时间: |
|
| 查看次数: |
2055 次 |
| 最近记录: |