gpt4 book ai didi

c# - 强制执行 REAL 不可为空字符串引用类型

转载 作者:行者123 更新时间:2023-12-02 02:30:17 24 4
gpt4 key购买 nike

我刚刚尝试了新的 C# 8 Nullable Reference Type ,它允许我们使用不可为空的字符串。

在我的.csproj (.NET Core 3.1)我这样设置:

<Nullable>enable</Nullable>

我创建了一个 FooClass如下:

public class FooClass
{
public FooClass(string testString, DateTime testDate)
{
if (testString == null || testString == string.Empty)
throw new ArgumentNullException(nameof(testString));
else if (testDate == null)
throw new ArgumentNullException(nameof(testDate));

MyString = testString;
MyDate = testDate;
}

public string MyString { get; }
public DateTime MyDate { get; }
}

但是,当我在 Main() 中创建类的新实例时与 null有目的的值(value)观:

var test = new FooClass(testString:null, testDate:null);

编译器可以正常使用 testString参数,但带有 testDate它告诉我的参数:

Argument 2: cannot convert from '<null>' to 'DateTime'

如何为第一个参数获得相同的行为?

我的testString参数是一个不可为 null 的引用类型,就像 testDate 。因为我没有将其声明为 string? ,我希望编译器对这两个参数的行为方式相同。

是否有另一个功能可以激活以在 C# 中强制执行真实非空字符串?

最佳答案

您可以将 TreatWarningsAsErrors 选项添加到 csproj 文件

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

或将 CS8625 警告添加到 WarningsAsErrors 列表

<WarningsAsErrors>NU1605;CS8625</WarningsAsErrors>

此代码将生成预期错误

var test = new FooClass(testString: null, testDate: default);

error CS8625: Cannot convert null literal to non-nullable reference type.

可空引用类型在 CLR 中作为类型注释实现,这可能是编译器首先在原始示例中显示 testDate 错误的原因。

var test = new FooClass(testString: null, testDate: null);

当您消除此错误时,您将看到带有可为空引用错误/警告的预期行为

关于c# - 强制执行 REAL 不可为空字符串引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com