有没有办法告诉 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行
- 每次使用前进行 null 检查或断言
每一个的问题是...
- 违反公司政策忽略警告
- 对大量代码禁用此检查比忽略个别警告更糟糕,因为可能存在其他有效问题,但被禁用
- 这将需要大量 R# 注释,从而否定 DoPreChecks 方法的有用性
- 同#3
现在我倾向于在政策上获得例外并忽略警告,但如果有办法告诉 R# 发生了什么,那将是一个更好的解决方案。不加参数不复杂化return类型可以吗?
ReSharper 中没有在方法的 return 值与 field/property
的空性之间建立关系的契约注释
考虑以下代码:
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行
- 每次使用前进行 null 检查或断言
每一个的问题是...
- 违反公司政策忽略警告
- 对大量代码禁用此检查比忽略个别警告更糟糕,因为可能存在其他有效问题,但被禁用
- 这将需要大量 R# 注释,从而否定 DoPreChecks 方法的有用性
- 同#3
现在我倾向于在政策上获得例外并忽略警告,但如果有办法告诉 R# 发生了什么,那将是一个更好的解决方案。不加参数不复杂化return类型可以吗?
ReSharper 中没有在方法的 return 值与 field/property
的空性之间建立关系的契约注释