如何将一个可空的整型转换为整型?假设我有2种类型的int如下:

int? v1;  
int v2; 

我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?


当前回答

你所需要的是…

v2= v1.GetValueOrDefault();

其他回答

到目前为止,其他答案都是正确的;我只是想再加一个稍微干净一点的:

v2 = v1 ?? default(int);

任何Nullable<T>都可以隐式转换为它的T,前提是被计算的整个表达式永远不会导致对ValueType的空赋值。那么,空合并操作符??只是三元运算符的语法糖:

v2 = v1 == null ? default(int) : v1.Value;

...这反过来是if/else的语法糖:

if(v1==null)
   v2 = default(int);
else
   v2 = v1.Value;

此外,在。net 4.0中,Nullable<T>有一个"GetValueOrDefault()"方法,这是一个空安全的getter,基本上执行如上所示的空合并,所以这也是有效的:

v2 = v1.GetValueOrDefault();

如果v2不为空,它将把v1的值赋给v2,否则它将采用默认值为零。

v2=v1??0

或者下面是另一种写法。

v2 = v1.HasValue?v1:0

你所需要的是…

v2= v1.GetValueOrDefault();

你可以这样做

v2 = v1.HasValue ? v1.Value : v2;

如果v1为空,就不能这样做,但可以用运算符检查。

v2 = v1 ?? 0;