如何将C#可空int转换为int
如何将一个可为空的int
转换为一个int
? 假设我有两种types的int,如下所示:
int? v1; int v2;
我想把v1
的值赋给v2
。 v2 = v1;
会导致错误。 如何将v1
转换为v2
?
到目前为止的其他答案都是正确的。 我只是想添加一个稍微更干净的:
v2 = v1 ?? default(int);
任何Nullable<T>
都可以隐式转换为T
,提供了被评估的整个expression式永远不会导致对ValueType的空赋值。 那么,空合并运算符 只是三元运算符的语法糖:
v2 = v1 == null ? default(int) : v1;
…这反过来语法糖一个if / else:
if(v1==null) v2 = default(int); else v2 = v1;
此外,从.NET 4.0开始, Nullable<T>
具有一个“GetValueOrDefault()”方法,它是一个基本上执行上面所示的空合并的无效getter,所以这也适用:
v2 = v1.GetValueOrDefault();
喜欢这个,
if(v1.HasValue) v2=v1.Value
您可以使用Value属性进行分配。
v2 = v1.Value;
所有你需要的是..
v2= v1.GetValueOrDefault();
如果v1为空,则不能这样做,但可以使用运算符进行检查。
v2 = v1 ?? 0;
如果你知道v1
有一个值,你可以使用Value
属性:
v2 = v1.Value;
使用GetValueOrDefault
方法将为该值分配值,否则为该types的默认值或您指定的默认值:
v2 = v1.GetValueOrDefault(); // assigns zero if v1 has no value v2 = v1.GetValueOrDefault(-1); // assigns -1 if v1 has no value
您可以使用HasValue
属性来检查v1
是否有值:
if (v1.HasValue) { v2 = v1.Value; }
还有对GetValueOrDefault(T)
方法的语言支持:
v2 = v1 ?? -1;
GetValueOrDefault()
检索对象的值。 如果为空,则返回int的默认值,即0。
例:
v2= v1.GetValueOrDefault();
这可能与v2 = Convert.ToInt32(v1);
完全可以为int转换可以这样做:
v2=(int)v1;
你可以做
v2 = v1.HasValue ? v1.Value : v2;
v1
和v2
之间的简单转换是不可能的,因为v1
的值域大于v2
。 这是v1
可以容纳的所有东西加上null
状态。 为了转换,你需要显式指定int
什么值将被用来映射null
状态。 最简单的方法是??
操作者
v2 = v1 ?? 0; // maps null of v1 to 0
这也可以以长的forms完成
int v2; if (v1.HasValue) { v2 = v1.Value; } else { v2 = 0; }
就我而言,最好的解决scheme是使用GetValueOrDefault()
方法。
v2 = v1.GetValueOrDefault();
如果它不为空,它会将v1
值赋给v2
,否则它会将默认值设置为零。
v2=v1??0
或者下面是写它的另一种方式。
v2 = v1.HasValue?v1:0