如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
如何将一个可空的整型转换为整型?假设我有2种类型的int如下:
int? v1;
int v2;
我想把v1的值赋给v2。V2 = v1;将导致错误。如何将v1转换为v2?
当前回答
int v2= Int32.Parse(v1.ToString());
其他回答
如果v1为空,就不能这样做,但可以用运算符检查。
v2 = v1 ?? 0;
像这样,
if(v1.HasValue)
v2=v1.Value
根据你的使用上下文,你可以使用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.
在c# 7.1及以后版本中,类型可以通过使用默认字面值而不是默认操作符来推断,因此它可以写成如下:
v2 = v1 ?? default;
int v2= Int32.Parse(v1.ToString());