2009-08-11 13 views
8

OpenFileDialog Metoda ShowDialog zwraca zerową wartość logiczną, ustawioną na wartość true, jeśli użytkownik kliknął przycisk OK lub false, jeśli kliknął przycisk Anuluj. Kiedy powraca null? Dokumentacja nie mówi.Kiedy metoda Microsoft.Win32.OpenFileDialog.ShowDialog() zwraca wartość null?

+1

"Ciekawość" to doskonale trafna odpowiedź, ale jestem ciekaw, dlaczego pytasz? Dlaczego po prostu nie porównać tego, co powróci do "prawdziwej" (TryParse, itp., Itd.) I kontynuować? – lance

+2

Zastanawiasz się, dlaczego używają zerowej wartości boolowskiej ponad standardową. Porównywanie do prawdziwych dzieł dobrze, jak sugerujesz. –

+0

Teraz też mnie ciekawi. Mam nadzieję, że ktoś przyjdzie z dobrą odpowiedzią! – lance

Odpowiedz

3

Według .NET reflector, Microsoft.Win32.OpenFileDialog.ShowDialog jest realizowany przez klasę bazową, Microsoft.Win32.CommonDialog. Że realizacja ma tylko jedną klauzulę powrotu:

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

RunDialog zwraca bool, a nie bool?.

bool? to tylko C# shorthand dla System.Nullable<bool>. constructor of System.Nullable<bool>, zgodnie z odbłyśnikiem ponownie, ustawia wartość nullable na jego parametr i oznacza jego właściwość hasValue jako true.

Więc ... nie powinieneś nigdy otrzymywać wyników w postaci null. Szybki test potwierdza, że ​​zamknięcie okna dialogowego bez anulowania (czerwony przycisk x) rzeczywiście zwraca wartość false, a nie null.

Wersja OpenFileDialog systemu Windows Forms zwraca DialogResult, który ma wider range of values.

1

Zgaduję, że OpenFileDialog zwraca bool? być spójnym z innymi dialogami WPF, które faktycznie mogą zwrócić wynik zerowy.

Powiązane problemy