我有点不清楚在Value获取可空类型中包含的值时何时/是否必须使用可空类型的属性.请考虑以下示例:
int? x = 10;
Console.WriteLine("The value of 'x' is " + x.Value);
Console.WriteLine("The value of 'x' is " + x);
Run Code Online (Sandbox Code Playgroud)
这两个都返回相同的值(10).
但是,如果我最初设置x为null,则第一个Console.WriteLine抛出异常而第二个抛出异常.
所以,我的问题是这个.使用该Value物业有什么意义?似乎不需要获取实际值(即使它是null),并且如果值确实会抛出异常null.
Jon*_*eet 28
这是通常需要-只是没有你的具体情况.该类型的x是Nullable<int>,没有int-而且也没有隐含的转换,从Nullable<T>到T.
让我们来看看你的例子中发生了什么.您的最后一行将被转换为:
Console.WriteLine(string.Concat("The value of 'x' is ", x));
Run Code Online (Sandbox Code Playgroud)
这是拳击x,这将导致无论是盒装int 还是空引用...这两者都是由处理string.Concat.
当您没有通过字符串连接转换为字符串时,例如,如果您需要:
int nonNullable = x.Value;
Run Code Online (Sandbox Code Playgroud)
那么你就必须使用Value属性-或有明确的转换,也可能是空合并运算符,或打电话GetValueOrDefault:
int nonNullable = (int) x;
int alternative = x ?? 20;
int andAnother = x.GetValueOrDefault(20);
Run Code Online (Sandbox Code Playgroud)
x并x.Value有不同的类型.
static void Meth(int i)
{
int? x = 5;
Meth(x);
Meth(x.Value);
}
Run Code Online (Sandbox Code Playgroud)
第二行不编译.
因此使用的原因x.Value显而易见 - 您需要在需要实际值时调用它.并且NullReferenceException是合理的,因为null不对应于值类型的值.
| 归档时间: |
|
| 查看次数: |
9818 次 |
| 最近记录: |