如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
当前回答
GetValueOrDefault ()
检索对象的值。如果它为null,则返回int的默认值,即0。
例子:
v2 = v1.GetValueOrDefault ();
其他回答
你可以这样做
v2 = v1.HasValue ? v1.Value : v2;
可以使用以下任何一种转换方法:
v2 = Convert.ToInt32(v1);
v2 = (int)v1;
v2 = v1.GetValueOrDefault();
V2 = v1。HasValue吗?v1:0;
根据你的使用上下文,你可以使用c# 7的模式匹配特性:
int? v1 = 100;
if (v1 is int v2)
{
Console.WriteLine($"I'm not nullable anymore: {v2}");
}
编辑:
由于有些人没有留下解释就投了反对票,我想添加一些细节来解释将此作为可行解决方案的基本原理。
C# 7's pattern matching now allows us check the type of a value and cast it implicitly. In the above snippet, the if-condition will only pass when the value stored in v1 is type-compatible to the type for v2, which in this case is int. It follows that when the value for v1 is null, the if-condition will fail since null cannot be assigned to an int. More properly, null is not an int. I'd like to highlight that the that this solution may not always be the optimal choice. As I suggest, I believe this will depend on the developer's exact usage context. If you already have an int? and want to conditionally operate on its value if-and-only-if the assigned value is not null (this is the only time it is safe to convert a nullable int to a regular int without losing information), then pattern matching is perhaps one of the most concise ways to do this.
如果给定类型的默认值是可接受的结果:
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()返回字段值,不进行任何检查。
可以使用Value属性进行赋值。
v2 = v1.Value;