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?
Respuesta
Esto se afirma en las cuestiones vinculadas a continuación, pero voy a mencionar aquí que Programming WPF (Chris Sells, Ian Griffiths) dice:
ShowDialog siempre devolverá verdadero o falso . ... Sólo después de que se muestre un cuadro de diálogo , pero antes de que se haya cerrado es DialogResult null.
Pregunta similar: When would ShowDialog() return null?
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.
Supongo que OpenFileDialog devuelve bool? para ser coherente con otros diálogos de WPF que realmente pueden devolver un resultado nulo.
- 1. ¿Cuándo Registry.CreateSubKey devuelve nulo?
- 2. HttpServletRequest.getSession (falso): ¿Cuándo devuelve nulo?
- 3. ¿Cuándo ShowDialog() devolverá nulo?
- 4. ¿Cuándo devuelve E_POINTER y cuándo E_INVALIDARG?
- 5. GetTemplateChild siempre devuelve nulo
- 6. ItemContainerGenerator.ContainerFromItem() devuelve nulo?
- 7. EKEvent eventIdentifier devuelve nulo
- 8. Java - class.getResource devuelve nulo
- 9. getDrawingCache() siempre devuelve nulo
- 10. System.Web.Security.FormsAuthentication.Encrypt devuelve nulo
- 11. Android: bitmapfactory.decodestream devuelve nulo
- 12. pathForResource devuelve nulo
- 13. CloudBlob.DownloadToStream devuelve nulo
- 14. getElementById devuelve nulo?
- 15. Sensor.TYPE_ROTATION_VECTOR devuelve nulo
- 16. Android LocationManager.getLastKnownLocation() devuelve nulo
- 17. document.getElementbyId() que devuelve nulo
- 18. System.console() devuelve nulo
- 19. DocumentBuilder.parse (InputStream) devuelve nulo
- 20. classloader.getSystemResourceAsStream devuelve nulo
- 21. XPathSelectElement siempre devuelve nulo
- 22. getSystemResourceAsStream() devuelve nulo
- 23. ¿Cuándo SqlCommand.ExecuteReader() devolverá nulo?
- 24. ¿Cómo acceder a Microsoft.Win32.UnsafeNativeMethods?
- 25. Android - findViewById (R.id.list) devuelve nulo
- 26. ¿Por qué document.GetElementById devuelve nulo
- 27. Cómo usar FacesContext.getCurrentInstance(), devuelve nulo
- 28. BitmapFactory.decodeStream devuelve nulo sin excepción
- 29. GetCustomAttribute() devuelve nulo para AssemblyVersionAttribute
- 30. BitmapFactory.decodeResource devuelve el valor nulo
"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
Solo me preguntaba por qué usan un boolean nullable en lugar de uno estándar. Comparar con verdadero funciona bien, como sugirió. –
Ahora me tienes curiosidad también. ¡Con suerte, alguien vendrá con una buena respuesta! – lance