在验证方法中检查 属性 时出现 C# 不可空编译器警告
C# non-nullable compiler warning when property was checked in a validation method
我有一个 class,它有一个 属性 声明为 string? Email { get; set; }
和一个方法,如果电子邮件为空或 null 则将 return false 以进行验证。此方法中还有其他更复杂的检查,因此为简洁起见,我在下面将它们排除在外。尽管检查了电子邮件是否为 null,如果它为 null,将 return False
,但编译器仍然抱怨它可能为 null。
public string? Email { get; set; }
private bool IsFormValid()
{
if (string.IsNullOrEmpty(Email))
{
return false;
}
return true;
}
public void Submit()
{
if (IsFormValid())
{
Submit(Email); // Compiler warns that Email may be null here
}
}
编译器是否无法识别 Email 在这种情况下不会为空,还是我遗漏了什么?除了重新检查 Email is not null 之外,此时是否有其他方法可以标记 Email is not null?
public void Submit()
{
if (IsFormValid() && Email is not null) // I don't want to do this since it was already checked
{
Submit(Email);
}
}
它不能那样工作,因为它可能是 null
。自从另一个线程调用 IsFormValid()
后,您如何确定 Email
没有更改为 null?您要么确定您确定处于单线程上下文中并用 !
覆盖警告,要么(首选)您对 Email
进行本地引用,检查它然后将其传递给 Submit
.
public void Submit() {
if (IsFormValid())
{
Submit(Email!);
}
}
或
public void Submit() {
string? email = Email;
if (IsFormValid() && email is not null) {
Submit(email);
}
}
我有一个 class,它有一个 属性 声明为 string? Email { get; set; }
和一个方法,如果电子邮件为空或 null 则将 return false 以进行验证。此方法中还有其他更复杂的检查,因此为简洁起见,我在下面将它们排除在外。尽管检查了电子邮件是否为 null,如果它为 null,将 return False
,但编译器仍然抱怨它可能为 null。
public string? Email { get; set; }
private bool IsFormValid()
{
if (string.IsNullOrEmpty(Email))
{
return false;
}
return true;
}
public void Submit()
{
if (IsFormValid())
{
Submit(Email); // Compiler warns that Email may be null here
}
}
编译器是否无法识别 Email 在这种情况下不会为空,还是我遗漏了什么?除了重新检查 Email is not null 之外,此时是否有其他方法可以标记 Email is not null?
public void Submit()
{
if (IsFormValid() && Email is not null) // I don't want to do this since it was already checked
{
Submit(Email);
}
}
它不能那样工作,因为它可能是 null
。自从另一个线程调用 IsFormValid()
后,您如何确定 Email
没有更改为 null?您要么确定您确定处于单线程上下文中并用 !
覆盖警告,要么(首选)您对 Email
进行本地引用,检查它然后将其传递给 Submit
.
public void Submit() {
if (IsFormValid())
{
Submit(Email!);
}
}
或
public void Submit() {
string? email = Email;
if (IsFormValid() && email is not null) {
Submit(email);
}
}