Я хочу использовать метод DateTime.TryParse, чтобы получить значение datetime строки в Nullable. Но когда я пробую это:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
компилятор говорит мне
аргумент out не классифицируется как переменная
Не уверен, что мне здесь нужно делать. Я также пробовал:
out (DateTime)d.Value
и это тоже не работает. Любые идеи?
Как говорит Джейсон, вы можете создать переменную правильного типа и передать ее. Возможно, вы захотите инкапсулировать его в свой собственный метод:
... или если вам нравится условный оператор:
Или в C # 7:
источник
Parse
ожидали, что он вернетсяDateTime
и выдаст исключение в случае неудачи, верно? Но да, вы можете делать все, что хотите ... и в Noda TimeParse
вместо этого я назвал соответствующие методы .else
Ключевое слово не является необходимым (в первом примере) , так как оконечная частьif
блока не может быть достигнута.Вот немного сжатое издание того, что предложил Джейсон:
источник
Вы не можете, потому что
Nullable<DateTime>
это другой типDateTime
. Для этого вам нужно написать свою собственную функцию,Надеюсь это поможет :)
РЕДАКТИРОВАТЬ: удален (очевидно) неправильно протестированный метод расширения, потому что (как указано в некоторых плохих словах) методы расширения, которые пытаются изменить параметр «этот», не будут работать с типами значений.
PS Речь идет о Bad Hoor - старый друг :)
источник
А как насчет создания метода расширения?
источник
dateTime
? Никогда не используется.DateTime? TryParse(this string dateString)
. Это просто причудливая реализация.(DateTime?).TryParse( ... )
илиNullable<DateTime>.TryParse( ... )
. Итак, Майк Зи прав, это глупая подпись метода.Я не понимаю, почему Microsoft не справилась с этим. Небольшой умный служебный метод для решения этой проблемы (у меня была проблема с int, но замена int на DateTime будет иметь тот же эффект, может быть ...
источник
Это тот лайнер, который вы ищете:
Если вы хотите сделать его правильным методом псевдорасширения TryParse, вы можете сделать это:
источник
Вот однострочное решение:
источник
В качестве альтернативы, если вас не беспокоит возможное возникшее исключение, вы можете изменить TryParse на Parse:
Хотя логического значения, указывающего на успех, тоже не будет, это может быть практично в некоторых ситуациях, когда вы знаете, что вводимый текст всегда будет действительным.
источник