我在 WPF 应用程序中编写了一些代码,如下所示:
var dialog = new OpenFileDialog { Filter = this.FileExtensionFilter };
var dialogResult = dialog.ShowDialog();
if (dialogResult.HasValue && dialogResult.Value)
{
... Process result of dialog ...
}
一切都很好,我想,但是 ReSharper 在检查时提出了一个警告dialogResult.HasValue
,“表达式总是正确的”。
第一个问题是 ReSharper 是如何知道 dialogResult 总是有结果的——它一定已经深入到Microsoft.Win32.OpenFileDialog
类的反编译代码中并观察到它永远不会返回 null。要么,要么只是专门针对此类的硬编码警告。
其次,仅仅假设结果永远不会为空似乎不是一个好习惯。如果 Microsoft 发布了可以使用空值的库的未来版本怎么办?关于此事的文档说:“在当前的实现中,派生类(OpenFileDialog 和 SaveFileDialog)只会返回 true 或 false”,这确实意味着这不是我们可以永远依赖的永久安排。
关于我是否过于谨慎,是否应该像 ReSharper 建议的那样删除这条线有什么想法吗?