2 c# variables nullable exception
请考虑以下代码:
int? myInt = null;
var hasValue = myInt.HasValue;
Run Code Online (Sandbox Code Playgroud)
这是完全可以接受的,并且HasValue将返回false.但是我如何设法在一个null的对象上引用属性?以下不起作用:
public class MyClass
{
public bool MyBool { get { return true; } };
}
// Elsewhere in code...
MyClass myObject = null;
myObject.MyBool;
Run Code Online (Sandbox Code Playgroud)
这会引发空引用异常.事实上,我正在比较上面的两个代码片段,好像它们是相等的,这告诉我,我在某处误解了结构或某种语法.
有人可以告诉我为什么代码片段1不会引发异常,但为什么我的代码片段会出现?
在第一种情况下,您有一个类型的值Nullable<int>,即" 类型的空值".该Nullable<T>类型是值类型有两个领域,就像这样:
public struct Nullable<T> where T : struct
{
private T value;
private bool hasValue;
}
Run Code Online (Sandbox Code Playgroud)
当您使用null带有a 的文字时Nullable<T>,您实际上只是创建一个值,其中该value字段的默认值为T,并且hasValue为false.使用该HasValue属性不遵循引用 - 它只是从结构中获取一个字段.
在第二种情况下,值myObject是一个空引用 ...所以如果你尝试使用该MyBool属性,那就失败了,因为它试图在没有一个对象时找到它.
所以关键点是:
Nullable<T> 是一个结构,而不是一个类Nullable<T>值只是具有两个字段的值,而不是引用null文本只是意味着"相关类型的空值",但这并不总是意味着空引用.| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |