微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在验证方法中检查属性时 C# 不可为空的编译器警告

如何解决在验证方法中检查属性时 C# 不可为空的编译器警告

我有一个类,该类的属性声明为 string? Email { get; set; }一个方法,如果电子邮件为空或 null 进行验证,该方法将返回 false。此方法中还有其他更复杂的检查,因此为简洁起见,我在下面将它们排除在外。尽管已检查电子邮件是否为空并且如果为空将返回 False,但编译器仍然抱怨它可能为空。


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。自从您被另一个线程调用 Email 后,您如何确定 IsFormValid() 没有更改为 null?你要么决定你肯定在单线程上下文中并用 ! 覆盖警告,或者(首选)你获取对 Email 的本地引用,检查它然后将它传递给 { {1}}。

Submit

public void Submit() {
    if (IsFormValid())
    {
        Submit(Email!);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。