我知道从C# 8开始,默认情况下引用类型是非空的,我们可以在项目文件中打开NRT。我看到了像这样的代码:
static void ThrowIfNull([NotNull] string? x)
{
if (x == null)
{
throw new ArgumentNullException();
}
}
我不知道在参数中使用[NotNull]
有什么意义。这就像告诉编译器:
"如果方法返回而没有抛出异常,那么x保证永远不会是null"
但是编译器为什么需要这个信息呢?如果我们这样做:
static void ThrowIfNull(string? x)
{
if (x == null)
{
throw new ArgumentNullException();
}
}
由于我们进行了空指针检查,所以代码没有产生警告。