如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
当前回答
如果给定类型的默认值是可接受的结果:
if (v1.HasValue)
v2 = v1.GetValueOrDefault();
如果你想在结果为undefined时获得不同的默认值:
v2 = v1.GetValueOrDefault(255); // or any valid value for int in place of 255
如果你只是想要返回值(不管方法是否失败):
v2 = v1.GetValueOrDefault();
net 4.7.2。: 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.HasValue ? v1.Value : v2;
如果给定类型的默认值是可接受的结果:
if (v1.HasValue)
v2 = v1.GetValueOrDefault();
如果你想在结果为undefined时获得不同的默认值:
v2 = v1.GetValueOrDefault(255); // or any valid value for int in place of 255
如果你只是想要返回值(不管方法是否失败):
v2 = v1.GetValueOrDefault();
net 4.7.2。: GetValueOrDefault()返回字段值,不进行任何检查。
GetValueOrDefault ()
检索对象的值。如果它为null,则返回int的默认值,即0。
例子:
v2 = v1.GetValueOrDefault ();
你所需要的是…
v2= v1.GetValueOrDefault();