【发布时间】:2013-10-29 11:05:35
【问题描述】:
我在 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 发布了可以使用空值的库的未来版本怎么办?关于此事的文档说:"In the current implementation, the derived classes (OpenFileDialog and SaveFileDialog) will only return true or false" 这确实意味着这不是我们可以永远依赖的永久安排。
对于我是否过于谨慎,是否应该按照 ReSharper 的建议删除该行有什么想法?
【问题讨论】:
标签: c# wpf resharper nullable openfiledialog