在不影响C#8可调零分析仪的情况下测试零位

在不影响C#8可调零分析仪的情况下测试零位,c#,c#-8.0,nullable-reference-types,C#,C# 8.0,Nullable Reference Types,启用C#8 nullable后,以下代码不会生成错误 var x = GetObjectX(); return x; 通过添加一行,我得到一个警告: var x = GetObjectX(); Debug.Assert(x != null); return x; //Warning: 'X' may be null here. Possible null reference return. 这是预期的行为吗 我不信任没有调试行的可空算法的原因是因为返回的对象是反序列化的 抑制警告的最干净方法

启用C#8 nullable后,以下代码不会生成错误

var x = GetObjectX();
return x;
通过添加一行,我得到一个警告:

var x = GetObjectX();
Debug.Assert(x != null);
return x; //Warning: 'X' may be null here. Possible null reference return.
这是预期的行为吗

我不信任没有调试行的可空算法的原因是因为返回的对象是反序列化的

抑制警告的最干净方法是什么?

试试

当您比编译器更清楚地知道可为null的变量在运行时不会为null时,可以使用它

var x = GetObjectX();
Debug.Assert(x != null);
return x!;

在.NET Core 3中,
Debug.Assert
[DoesNotReturnWhen(false)]
注释,这有助于编译器理解代码并避免警告

如果没有它,编译器会将null测试视为用户发出的一个指示,表明该值可能最终为null


如果不使用.NETCore3,则可以创建自己的断言方法。请参见示例。

谢谢,我的项目运行的是.NET Core 3,但这些代码行位于引用netstandard 2.0的库中,其中Debug.Assert没有此属性。我将相同的代码从库移动到主项目中,但警告没有显示在那里。