如何将C#可空int转换为int

如何将一个可为空的int转换为一个int ? 假设我有两种types的int,如下所示:

 int? v1; int v2; 

我想把v1的值赋给v2v2 = 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; 

v1v2之间的简单转换是不可能的,因为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