kat*_*kak 1 c# nullable visual-studio roslyn nullable-reference-types
给出以下代码示例:
class Value { }
Value? value = null;
if (value is not null)
{
Value value2 = value;
}
Run Code Online (Sandbox Code Playgroud)
int? value = null;
if (value is not null)
{
int value2 = value; // CS0266: Cannot implicitly convert type 'int?' to 'int'.
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题与引用类型与值类型有关。
但是,在这两种情况下,我都检查是否value为 null,那么为什么编译器不能理解第二个示例中 if 块内的值永远不应该为 null?
我可以通过使用来解决这个问题value.Value,但这似乎违反直觉。
如有帮助,将不胜感激。
因为C#/.NET 中可为 null 的值类型Nullable<T>是通过单独的类型 ( ) 表示的,即int?is 实际上是Nullable<int>。您可以使用模式匹配。例如:
if (value is {} value2)
{
Console.WriteLine(value2);
}
Run Code Online (Sandbox Code Playgroud)
或者
if (value is {} value2)
{
Console.WriteLine(value2);
}
Run Code Online (Sandbox Code Playgroud)
或者只需访问Nullable.Value:
if (value is not null)
{
int value2 = value.Value;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,可空引用类型string?不是通过单独的类型表示的(即从类型信息的角度来看,可string空性信息存储在某种元数据中 - 例如参见这个答案),即人们可能会认为某种在这种情况下发生类型擦除。
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |