的爲空的結果我已經寫在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建議刪除該行的想法?
回答問題的另一半的好工作 - 我相信這是JetBrains的一個錯誤,它是一個非常糟糕的假設,仍然API不會返回null,它只是一個實現細節。 – Ian
非常感謝您澄清此JMK。我同意@Ian的看法,這似乎是不好的編程習慣,就像這樣做硬編碼的假設。公共接口通常應該被視爲黑盒子,如果它具有可爲空的返回類型,你應該迎合這一點。 –
這是一個恥辱,我不能標記兩個答案被接受,因爲他們每個回答多個問題的不同部分!無論如何都可以調高。 –