Tho*_*que 12 resharper annotations notnull
请考虑以下代码:
public static void Foo()
{
Bar(null);
}
public static void Bar([NotNull] string s)
{
if (s == null)
throw new ArgumentNullException("s");
}
Run Code Online (Sandbox Code Playgroud)
该[NotNull]
属性用于Bar
告诉s
不应为null的调用者.这工作正常,当我将null传递给Bar
(可能'null'赋值给标记为'NotNull'属性的实体时),我收到警告.
但它实际上并没有阻止我传递null,所以Bar
仍然必须检查是否s
为null.那么为什么我也会收到警告if (s == null)
(表达总是假的)?
据我所知,这个属性有一个含糊不清的含义; 根据具体情况,它可能意味着两件事:
我是否正确使用此属性,或者我错过了什么?
顺便说一下,我正在使用Resharper 7 EAP,所以它可能是一个bug; 但是我想在报告之前确保我的用法是正确的...
编辑:刚刚在R#5.1上尝试过同样的事情; 它在呼叫站点上显示警告,但不在方法中显示.我将在Jetbrain的Youtrack上报告.
EDIT2:这里报告错误
据我所知,您使用它是正确的,而 ReSharper 告诉您比较始终是错误的false
。该[NotNull]
属性只不过是文档,您的代码可以正确地仔细检查输入值。这并不是 ReSharper 第一次提出错误或愚蠢的建议。JetBrains 的一个很酷的事情是他们有一个公共错误跟踪器,您可以在其中报告此问题并直接从开发人员那里获得反馈。
也就是说(如果您意识到这一点,请原谅我),C# 4.0 的代码契约使这一切变得简单、可预测且可靠:
Contract.RequiresAlways(s != null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2106 次 |
最近记录: |