我正在学习 C# .NET 8 Razor Pages 的模型绑定和验证。我设置了一个简单的输入模型来测试验证(来自 ASP.NET Core Razor Pages in Action,Mike Brind):
public class InputModel
{
[Required]
public string CountryName { get; set; }
[Required, StringLength(2, MinimumLength = 2)]
public string CountryCode { get; set; }
}
但是我收到以下编译器警告:
Warning CS8618 Non-nullable property 'CountryName' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
,与CountryCode
相同。
这很容易理解,我应该为
CountryName
和 CountryCode
分配一个值,或者将它们设置为可为空,但什么是最正确的,为什么?
public string CountryName { get; set; } = default!;
public string CountryName { get; set; } = string.Empty;
public string CountryName { get; set; } = "";
public string? CountryName { get; set; }
public string? CountryName { get; set; } = default;
这只是一个警告,告诉您,我们应该将其设置为非空。您使用的所有选项都可以,在我看来,如果您不想在代码中进行可空检查,您可以使用
public string CountryName { get; set; } = string.Empty;
或 public string CountryName { get; set; } = "";
。
但是由于你的代码里面有要求验证,如果你用好了验证的话它不会为空,所以不需要设置默认值,你也可以选择
public string? CountryName { get; set; }
。
另一种忽略此警告的方法是修改csproj,如下所示:
<Nullable>disable</Nullable>