gpt4 book ai didi

c# - 为什么 resharper 提示左操作数永远不为空

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:48 24 4
gpt4 key购买 nike

Dialog 结果似乎返回一个可为 null 的 bool 值 (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 文件,从 CommonDialogControl 使用它时,似乎 ShowDialog 不会为空, 但在 Window 中使用它时它可能为 null。附上屏幕截图。
似乎必须更深入地挖掘,因为我不确定我使用的是哪一个。

screenshot2

最佳答案

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

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

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

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

ReSharper 额外支持添加 External Annotations到核心 .Net 代码。这允许将这些提示添加到 ReSharper 无法控制的代码中。 (如果您想向 3rd 方库添加注释,也可以使用它)。

总结一下,ReSharper 似乎已经用 [NotNull] 注释了 Window.ShowDialog 所以即使返回类型可以为 null,ReSharper“知道”它永远不会为 null 并提出您所看到的建议。

关于c# - 为什么 resharper 提示左操作数永远不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26904702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com