次のようなコードを 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 が提案するように、私が用心深く、行を削除する必要があるかどうかについて何か考えはありますか?