下面的代码示例如下:
class Value { }
Value? value = null;
if (value is not null)
{
Value value2 = value;
}
个字符
我理解这个问题与引用类型和值类型有关。
然而,在这两种情况下,我都在检查value
是否为null,那么为什么编译器不能理解第二个例子中if块中的value永远不应该为null?
我可以通过使用value.Value
来解决这个问题,但这似乎违反直觉。
希望你能帮忙。
下面的代码示例如下:
class Value { }
Value? value = null;
if (value is not null)
{
Value value2 = value;
}
个字符
我理解这个问题与引用类型和值类型有关。
然而,在这两种情况下,我都在检查value
是否为null,那么为什么编译器不能理解第二个例子中if块中的value永远不应该为null?
我可以通过使用value.Value
来解决这个问题,但这似乎违反直觉。
希望你能帮忙。
1条答案
按热度按时间hs1rzwqc1#
因为C#/.NET中的nullable value types是通过一个单独的类型(
Nullable<T>
)表示的,即int?
实际上是Nullable<int>
。你可以使用模式匹配。例如:字符串
或
型
或者直接访问
Nullable.Value
:型
另一方面,Nullable references types不通过单独的类型来表示(即,从类型信息的Angular 来看,
string?
是string
,并且可空性信息存储在某种元数据中-例如参见this answer),即,可以认为在这种情况下发生了某种类型的擦除。