编程语言
首页 > 编程语言> > c# – 检查OpenFileDialog的可空结果

c# – 检查OpenFileDialog的可空结果

作者:互联网

我在WPF应用程序中编写了一些代码,如下所示:

var dialog = new OpenFileDialog { Filter = this.FileExtensionFilter };
var dialogResult = dialog.ShowDialog();
if (dialogResult.HasValue && dialogResult.Value)
{
    ... Process result of dialog ...
}

一切都很好,我想,但是ReSharper在checkResult.HasValue的检查中提出了一个警告,“表达总是正确的”.

第一个问题是ReSharper如何知道dialogResult总是有结果 – 它必须潜入到Microsoft.Win32.OpenFileDialog类的反编译代码中,并观察到它永远不会返回null.要么就是这个,要么它只是一个专门针对这个类的硬编码警告.

其次,假设结果永远不会为空,似乎不是一种好的做法.如果Microsoft发布了null值可用的库的未来版本,该怎么办?关于此事的文件说:“In the current implementation, the derived classes (OpenFileDialog and SaveFileDialog) will only return true or false”这意味着这不是我们可以永远依赖的永久性安排.

是否有任何想法我是否过于谨慎,应该删除ReSharper建议的那条线?

解决方法:

这看起来很奇怪. MSDN规范声明它将返回true或false,但仍然必须有Nullable的原因.

我完全同意你的观点,假设下面的实现是不好的做法.我会根据接口进行编码,所以在这种情况下我认为检查HasValue是正确的方法.

Re-sharper如何知道?我恐怕无法回答这个问题.这不是我使用的东西,它们可能已经硬编码了.

您可能会对此感兴趣:When does Microsoft.Win32.OpenFileDialog.ShowDialog() return null?

似乎存在null的可能性的原因是因为这是用户关闭对话框之前的结果.

标签:c,resharper,wpf,nullable,openfiledialog
来源: https://codeday.me/bug/20190529/1176236.html