我有一个复杂的对象我想检查是否有效。我有一个方法来检查它,但是C#可为空性检查不知道它们:
#nullable enable
...
bool IsValid(Thing? thing)
{
return thing?.foo != null && thing?.bar != null;
}
...
if(IsValid(thing))
{
thing.foo.subProperty; // CS8602 warning: foo is possibly null here
有没有办法在这里应用类似TypeScript的类型门的东西?如果isvalid
为true,那么我们知道thing.foo
不是null,但是C#分析器看不到函数内部。如果我内联检查它可以,但我是复制粘贴代码,这是一个简单的例子。
是否有任何注释或模式,我可以有空性分析与更复杂的检查?
您可以像这样使用null-forgening运算符:
if (IsValid(thing))
{
thing.foo!.subProperty;
}
正如@JeroenMostert所指出的,虽然它不能帮助您使用foo
,但另一种选择是NotNullWhen
属性。
编译器知道thing
在这里不是null
,但是foo
可能仍然是null
。
bool IsValid([NotNullWhen(true)] Thing? thing)
{
return thing?.foo != null && thing?.bar != null;
}
if (IsValid(thing))
{
thing.foo;
}