2009-08-11 57 views
8

OpenFileDialogShowDialog方法返回一個可爲null的布爾值,如果用戶單擊了Cancel,則單擊OK或False時設置爲true。它什麼時候返回null?該文件沒有說。Microsoft.Win32.OpenFileDialog.ShowDialog()何時返回null?

+1

「好奇心」是一個非常好的答案,但我很想知道你爲什麼問?爲什麼不直接比較它返回到「真」(TryParse等等)並滾動? – lance

+2

只是想知道爲什麼他們使用可空的布爾值而不是標準布爾值。正如你所建議的,與真正的作品相比,效果很好。 –

+0

現在你也讓我好奇。希望有人會有一個很好的答案! – lance

回答

3

按照.NET reflectorMicrosoft.Win32.OpenFileDialog.ShowDialog由基類,Microsoft.Win32.CommonDialog實施。這實現了只有一個return語句:

return new bool?(this.RunDialog(activeWindow)); 

RunDialog返回bool,而不是一個bool?

bool?對於System.Nullable<bool>只是C# shorthand。根據反射器,constructor of System.Nullable<bool>再次將空值的值設置爲其參數,並將其hasValue屬性標記爲true。

所以......你不應該得到null結果。快速測試證實,在不取消(紅色x按鈕)的情況下關閉對話框確實會返回false值,而不是null

OpenFileDialog的Windows窗體版本返回一個DialogResult,它有一個wider range of values

1

我的猜測是OpenFileDialog返回bool?以與實際上可以返回空結果的其他WPF對話一致。