为什么resharper建议左操作数永远不为null

时间:2014-11-13 08:51:34

标签: c# visual-studio-2012 resharper

看起来像Dialog结果返回一个可以为空的布尔值( bool?),所以每当使用返回对话框时,你应该处理null选项(我还在等待看到发生的事情) ......)。

上面的代码(VS2012,Resharper 8)表明左操作数永远不为空。有什么想法吗?

bool? dlg_result = some_window.ShowDialog();
bool some_bool = !dlg_result ?? true; // Resharper suggests this won't happen.

这是一个截图,更容易看到:

screenshot

编辑:
我已经查看了resharper文件,当ShowDialogCommonDialog使用时,Control似乎不会为空,但它可能是从Window使用它时为null。附上截图。
似乎要深入挖掘,因为我不确定我使用的是哪一个。

screenshot2

1 个答案:

答案 0 :(得分:2)

ReSharper包含一个名为Code Annotations的功能,它提供了一种使用ReSharper提示来装饰源代码的机制。例如:

[NotNull]
public object Foo()
{
    return null; // Warning: Possible 'null' assignment
}      

NotNull属性将指示ReSharper在尝试返回null时在方法中发出Visual Studio警告。它还会导致ReSharper发出不需要空合并运算符(??)的建议,因为方法返回值永远不为null:

Foo() ?? new object; //Causes '??' left operand is never null suggestion

ReSharper还支持将External Annotations添加到核心.Net代码中。这允许将这些提示添加到ReSharper无法控制的代码中。 (如果要向第三方库添加注释,也可以使用此方法。)

所以要结束,看起来ReSharper已注释Window.ShowDialog [NotNull],所以即使返回类型可以为空,ReSharper"也知道"它永远不会为空,并提出你所看到的建议。