看起来像Dialog结果返回一个可以为空的布尔值( bool?),所以每当使用返回对话框时,你应该处理null选项(我还在等待看到发生的事情) ......)。
上面的代码(VS2012,Resharper 8)表明左操作数永远不为空。有什么想法吗?
bool? dlg_result = some_window.ShowDialog();
bool some_bool = !dlg_result ?? true; // Resharper suggests this won't happen.
这是一个截图,更容易看到:
编辑:
我已经查看了resharper文件,当ShowDialog
和CommonDialog
使用时,Control
似乎不会为空,但它可能是从Window
使用它时为null。附上截图。
似乎要深入挖掘,因为我不确定我使用的是哪一个。
答案 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"也知道"它永远不会为空,并提出你所看到的建议。