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. DocumentBuilder.parse (InputStream) devuelve nulo
- 6. System.Web.Security.FormsAuthentication.Encrypt devuelve nulo
- 7. document.getElementbyId() que devuelve nulo
- 8. Sensor.TYPE_ROTATION_VECTOR devuelve nulo
- 9. getSystemResourceAsStream() devuelve nulo
- 10. System.console() devuelve nulo
- 11. ItemContainerGenerator.ContainerFromItem() devuelve nulo?
- 12. classloader.getSystemResourceAsStream devuelve nulo
- 13. Java - class.getResource devuelve nulo
- 14. GetTemplateChild siempre devuelve nulo
- 15. EKEvent eventIdentifier devuelve nulo
- 16. getDrawingCache() siempre devuelve nulo
- 17. XPathSelectElement siempre devuelve nulo
- 18. getElementById devuelve nulo?
- 19. Android LocationManager.getLastKnownLocation() devuelve nulo
- 20. Android: bitmapfactory.decodestream devuelve nulo
- 21. CloudBlob.DownloadToStream devuelve nulo
- 22. pathForResource devuelve nulo
- 23. ¿Cuándo SqlCommand.ExecuteReader() devolverá nulo?
- 24. ¿Cómo acceder a Microsoft.Win32.UnsafeNativeMethods?
- 25. Registry.LocalMachine.OpenSubKey() devuelve un valor nulo
- 26. android get activity devuelve nulo
- 27. Cómo usar FacesContext.getCurrentInstance(), devuelve nulo
- 28. por qué Files.probeContentType devuelve nulo
- 29. BitmapFactory.decodeResource devuelve el valor nulo
- 30. GetCustomAttribute() devuelve nulo para AssemblyVersionAttribute
"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