Chcę użyć metody DateTime.TryParse, aby uzyskać wartość daty i godziny w ciągu do wartości Nullable. Ale kiedy próbuję tego:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
kompilator mi mówi
Argument „out” nie jest klasyfikowany jako zmienna
Nie wiem, co muszę tutaj zrobić. Próbowałem też:
out (DateTime)d.Value
i to też nie działa. Jakieś pomysły?
Jak mówi Jason, możesz stworzyć zmienną odpowiedniego typu i przekazać ją. Możesz chcieć zamknąć go w swojej własnej metodzie:
... lub jeśli podoba ci się operator warunkowy:
Lub w C # 7:
źródło
Parse
oczekiwać, że powróciDateTime
i zgłosi wyjątek w przypadku niepowodzenia, prawda? Ale tak, możesz robić, co chcesz ... aw Czasie NodyParse
zamiast tego wymieniłem odpowiednie metody .else
kluczowe jest niepotrzebne (w Twoim pierwszym przykładzie), ponieważ punkt końcowyif
bloku nigdy nie może zostać osiągnięty.Oto nieco zwięzłe wydanie tego, co zasugerował Jason:
źródło
Nie możesz, ponieważ
Nullable<DateTime>
jest to inny typDateTime
. Aby to zrobić, musisz napisać własną funkcję,Mam nadzieję że to pomoże :)
EDYCJA: Usunięto (oczywiście) nieprawidłowo przetestowaną metodę rozszerzenia, ponieważ (jak wskazały niektóre złe hoor) metody rozszerzające, które próbują zmienić parametr „this”, nie będą działać z typami wartości.
PS Bad Hoor, o którym mowa, to stary przyjaciel :)
źródło
A co z tworzeniem metody rozszerzenia?
źródło
dateTime
? Nigdy nie jest używany.DateTime? TryParse(this string dateString)
. Ta implementacja jest po prostu dziwna.(DateTime?).TryParse( ... )
lubNullable<DateTime>.TryParse( ... )
. Więc mike z ma rację, to głupi podpis metody.Nie rozumiem, dlaczego Microsoft tego nie poradził. Sprytna, mała, użyteczna metoda radzenia sobie z tym problemem (miałem problem z int, ale zastąpienie int przez DateTime da ten sam efekt, może być .....
źródło
Oto jedyna wkładka, której szukasz:
Jeśli chcesz, aby była to właściwa metoda pseudo-rozszerzenia TryParse, możesz to zrobić:
źródło
Oto rozwiązanie z jedną linią:
źródło
Alternatywnie, jeśli nie jesteś zaniepokojony możliwym zgłoszonym wyjątkiem, możesz zmienić TryParse dla Parse:
Chociaż nie będzie również wartości logicznej wskazującej na sukces, może to być praktyczne w niektórych sytuacjach, w których wiesz, że tekst wejściowy zawsze będzie prawidłowy.
źródło