2009-08-11 9 views
8

OpenFileDialog El método ShowDialog devuelve un valor booleano anulable, establecido en verdadero si el usuario hizo clic en Aceptar o en falso si hizo clic en Cancelar. ¿Cuándo devuelve null? La documentación no dice.¿Cuándo Microsoft.Win32.OpenFileDialog.ShowDialog() devuelve nulo?

+1

"Curiosidad" es una respuesta perfectamente buena, pero tengo curiosidad por saber por qué preguntas? ¿Por qué no simplemente comparar lo que vuelve a "verdadero" (TryParse, etc., etc.) y continuar? – lance

+2

Solo me preguntaba por qué usan un boolean nullable en lugar de uno estándar. Comparar con verdadero funciona bien, como sugirió. –

+0

Ahora me tienes curiosidad también. ¡Con suerte, alguien vendrá con una buena respuesta! – lance

Respuesta

3

De acuerdo con la .NET reflector, Microsoft.Win32.OpenFileDialog.ShowDialog se implementa mediante una clase base, Microsoft.Win32.CommonDialog. Que la aplicación sólo tiene una cláusula de devolución:

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

RunDialog devuelve un bool, no un bool?.

bool? es solo un C# shorthand para System.Nullable<bool>. El constructor of System.Nullable<bool>, de acuerdo con el reflector de nuevo, establece el valor del anulable en su parámetro, y marca su propiedad hasValue como verdadera.

Entonces ... nunca debería obtener un resultado null. Una prueba rápida confirma que cerrar el diálogo sin cancelar (botón rojo x) de hecho devuelve un valor de false, no un null.

La versión de Windows Forms de OpenFileDialog devuelve un DialogResult, que tiene un wider range of values.

1

Supongo que OpenFileDialog devuelve bool? para ser coherente con otros diálogos de WPF que realmente pueden devolver un resultado nulo.

Cuestiones relacionadas