问题
OpenFileDialog's ShowDialog method returns a nullable boolean, set to true if the user clicked OK or false if he clicked Cancel. When does it return null? The documentation does not say.
回答1:
This is stated in the questions linked below, but I'll mention here that Programming WPF (Chris Sells, Ian Griffiths) says:
ShowDialog will always return true or false. ... Only after a dialog has been shown but before it's been closed is DialogResult null.
Similar question: When would ShowDialog() return null?
And: Why is DialogResult a nullable bool in WPF?
回答2:
According to the .NET reflector, Microsoft.Win32.OpenFileDialog.ShowDialog is implemented by a base class, Microsoft.Win32.CommonDialog. That implementation has only one return clause:
return new bool?(this.RunDialog(activeWindow));
RunDialog returns a bool, not a bool?.
bool? is just a C# shorthand for System.Nullable<bool>. The constructor of System.Nullable<bool>, according to reflector again, sets the value of the nullable to its parameter, and marks its hasValue property as true.
So... you shouldn't ever get a null result. A quick test confirms that closing the dialog without canceling (red x button) indeed returns a false value, not a null.
The Windows Forms version of OpenFileDialog returns a DialogResult, which has a wider range of values.
回答3:
My guess is that OpenFileDialog returns bool? to be consistent with other WPF dialogs that actually can return a null result.
来源:https://stackoverflow.com/questions/1261910/when-does-microsoft-win32-openfiledialog-showdialog-return-null