有没有办法告诉 R# 在我运行 a 方法后,某些类变量不会为 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;
}
}

R#担心";NullableInt.Value;当我在";DoTest";,只是如果是的话;DoPreChecks";会返回false,这意味着我永远不会到达这条线。我看了R#的代码注释,我发现我可以告诉它在有限的条件下应该得到什么输出,这似乎是我可以在这里利用的东西,但我看不出有任何方法可以告诉它,当输出为true/false/null/notnull时,类变量(与输入或输出无关(将具有特定的值类型(true/falsec/null/nomnull(。能做这样的事吗?

这里的用例是——我有十几个方法,它们都依赖于相同的前提条件,包括几个正在初始化的类变量。与其把所有这些检查都放在每个方法中,我想让它们都运行";DoPreChecks";方法,如果它返回true,我们就可以继续了。问题是R#不能遵循这一点,并认为我有很多可能的空引用异常。我可以:

  1. 完全忽略错误,只允许到处出现摆动的线条
  2. 禁用并恢复这些方法开始和结束时的警告
  3. 每次禁用警告1行
  4. 每次使用前进行null检查或断言

每个问题都是…

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

现在我倾向于在策略上获得一个异常,而忽略警告,但如果有办法告诉R#发生了什么,那将是一个更好的解决方案。可以在不添加参数或使返回类型复杂化的情况下完成吗?

ReSharper中没有在方法的返回值和字段/属性的null之间建立关系的约定注释

最新更新