4

次のようなコードを 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 が常に結果を持っていることを認識しているのかということです。ReSharper は、Microsoft.Win32.OpenFileDialogクラスの逆コンパイルされたコードに飛び込んで、決して null を返さないことを観察したに違いありません。それか、このクラス専用のハードコーディングされた警告です。

第 2 に、結果が null になることは決してないと仮定することは、良い習慣とは思えません。Microsoft が、null 値が使用可能になるライブラリの将来のバージョンをリリースした場合はどうなりますか? この問題に関するドキュメントには、「現在の実装では、派生クラス (OpenFileDialog および SaveFileDialog) は true または false のみを返します」と記載されています。

ReSharper が提案するように、私が用心深く、行を削除する必要があるかどうかについて何か考えはありますか?

4

2 に答える 2