Eu quero usar o método DateTime.ExperimenteParse para obter o valor de data e hora de uma string em um Nullable. Mas quando eu tento isso:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
o compilador me diz
argumento 'out' não é classificado como uma variável
Não tenho certeza do que preciso fazer aqui. Eu também tentei:
out (DateTime)d.Value
e isso também não funciona. Alguma ideia?
Como diz Jason, você pode criar uma variável do tipo certo e passar isso. Você pode querer encapsulá-lo em seu próprio método:
... ou se você gosta do operador condicional:
Ou em C # 7:
fonte
Parse
esperariam que ele retornasseDateTime
e gerasse uma exceção em caso de falha, certo? Mas sim, você pode fazer o que quiser ... e no Tempo de Noda, nomeei os métodos relevantesParse
.else
palavra-chave é desnecessária (em seu primeiro exemplo), pois o ponto final doif
bloco nunca pode ser alcançado.Aqui está uma edição ligeiramente concisa do que Jason sugeriu:
fonte
Você não pode porque
Nullable<DateTime>
é um tipo diferente deDateTime
. Você precisa escrever sua própria função para fazer isso,Espero que isto ajude :)
EDITAR: Removido o método de extensão (obviamente) testado de maneira inadequada, porque (como apontado por alguns hoor ruins) os métodos de extensão que tentam alterar o parâmetro "this" não funcionarão com Tipos de valor.
PS O Bad Hoor em questão é um velho amigo :)
fonte
Que tal criar um método de extensão?
fonte
dateTime
para? Nunca é usado.DateTime? TryParse(this string dateString)
. Essa implementação é simplesmente bizarra.(DateTime?).TryParse( ... )
ouNullable<DateTime>.TryParse( ... )
. Então mike z está certo, essa é uma assinatura boba para o método.Não vejo por que a Microsoft não lidou com isso. Um pequeno método utilitário inteligente para lidar com isso (tive o problema com int, mas substituir int por DateTime terá o mesmo efeito, pode ser ...
fonte
Este é o revestimento que você está procurando:
Se quiser torná-lo um método de pseudo-extensão TryParse adequado, você pode fazer isso:
fonte
Aqui está uma solução de linha única:
fonte
Como alternativa, se você não estiver preocupado com a possível exceção gerada, pode alterar o TryParse para o Parse:
Embora também não haja um booleano indicando o sucesso, pode ser prático em algumas situações em que você sabe que o texto de entrada sempre será válido.
fonte