有没有办法告诉 R# 在我 运行 一个方法之后,某些 class 变量不会为空

Is there a way to tell R# that after I run a a method, certain class variables won't be null

考虑以下代码:

public class TestClass
{
    public int? NullableInt { get; set; }

    private bool DoPreChecks()
    {
        if(NullableInt == null)
            return false;

        return true;
    }

    public bool DoTest()
    {
        if(!DoPreChecks())
            return false;

        //Here R# tells me that "nullableInt" may be null
        if (NullableInt.Value > 10)
        {
            // Do something
        }

        return true;
    }
}
当我在“DoTest”中引用它时,

R# 担心“NullableInt.Value”可能为空是正确的,除非它是,那么“DoPreChecks”将 returned false,这意味着我永远不会到达这条线。我正在查看 R# 的代码注释,我看到我可以告诉它在有限条件下期望的输出,这似乎是我可以在这里利用的东西,但我没有看到任何方式来告诉它什么时候输出是 true/false/null/notnull,那么一个 class 变量(与输入或输出无关)将具有特定的值类型(true/false/null/notnull)。这样的事情能做吗?

这里的用例是这样的——我有十几个方法都依赖于相同的前提条件,包括几个正在初始化的 class 变量。我不想将所有这些检查都放在每个方法中,而是让它们全部 运行 “DoPreChecks” 方法,如果它 return 是真的,我们就可以开始了。问题是 R# 无法遵循这一点,并认为我有很多可能的空引用异常。我可以:

  1. 完全忽略错误,只容忍到处都是波浪线
  2. 禁用和恢复这些方法开始和结束时的警告
  3. 一次禁用警告1行
  4. 每次使用前进行 null 检查或断言

每一个的问题是...

  1. 违反公司政策忽略警告
  2. 对大量代码禁用此检查比忽略个别警告更糟糕,因为可能存在其他有效问题,但被禁用
  3. 这将需要大量 R# 注释,从而否定 DoPreChecks 方法的有用性
  4. 同#3

现在我倾向于在政策上获得例外并忽略警告,但如果有办法告诉 R# 发生了什么,那将是一个更好的解决方案。不加参数不复杂化return类型可以吗?

ReSharper 中没有在方法的 return 值与 field/property

的空性之间建立关系的契约注释