如何解决有没有办法告诉R#,在我运行一个方法之后,某些类变量将不会为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#是正确的,因为担心在我在“ DoTest”中引用“ NullableInt.Value”时可能为空,但如果是,则“ DoPreChecks”将返回false,这意味着我永远都不会得到到这条线。我正在查看R#的代码注释,我发现可以告诉它在有限条件下的预期输出,这似乎是我可以利用的东西,但是我看不到有什么方法可以告诉它输出为true / false / null / notnull,则一个类变量(与输入或输出无关)将具有某个值类型(true / false / null / notnull)。可以这样做吗?
这里的用例是这样-我有十二种方法,它们都依赖于相同的前提条件,包括几个正在初始化的类变量。与其将所有这些检查放到每个方法中,不如让它们全部运行“ DoPreChecks”方法,如果它返回true,那么我们很好。问题是R#不能遵循它,并认为我有很多可能的null引用异常。我可以:
- 完全忽略错误,只是容忍到处都是摆动的线条
- 在这些方法的开始和结束处禁用并恢复警告
- 一次禁用警告1行
- 在每次使用前进行空检查或断言
每个问题都是...
- 违反公司政策以仅忽略警告
- 在大范围的代码上禁用此检查比忽略单个警告要糟糕,因为可能存在其他有效问题,但会被禁用
- 这将需要大量R#注释,从而否定了DoPreChecks方法的有用性
- 与#3相同
现在,我倾向于在策略上获得例外,而忽略警告,但是如果有一种方法可以告诉R#发生了什么,那将是一个更好的解决方案。可以在不添加参数或不复杂返回类型的情况下完成此操作吗?
解决方法
ReSharper中没有用于在方法的返回值和字段/属性的空值之间建立关系的合同注释
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。