sto creando un convertitore genericoImpossibile modificare il tipo di nullable nel metodo generico
Ecco un codice di esempio del convertitore generica
bool TryReaderParse<TType>(object data, out TType value)
{
value = default(TType);
Type returnType = typeof(TType);
object tmpValue = null;
if (returnType == typeof(DateTime))
{
tmpValue = StringToDatetime(data.ToString());
}
else if (returnType == typeof(DateTime?)) // THIS IF FIRES
{
tmpValue = StringToNullableDatetime(data.ToString());
}
value = (TType)Convert.ChangeType(tmpValue, returnType); // THROWS
}
public DateTime? StringToNullableDatetime(string date)
{
DateTime? datetime = null;
if (!string.IsNullOrEmpty(date))
{
datetime = DateTime.Parse(date, new CultureInfo(Resources.CurrentCulture));
}
return datetime;
}
E questo è come lo uso:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
L'eccezione generata dice che non è possibile convertire da DateTime
a Nullable<DateTime>
. Dal momento che il metodo crea e restituisce un tipo nullable, come mai il casting fallisce?
Alla fine, voglio avere un DateTime nullable, in questo particolare esempio.
modificare Il problema è che StringToNullableDatetime
metodo restituisce un Datetime?
e il casting dice che non si può convertire da Datetime
Poiché il metodo StringToNullableDatetime
restituisce un datetime nullable, come è possibile che il Convert.ChangeType
non può vedere che il passato l'argomento è nullable?
Ps. Ho letto risposte come this una che fa il contrario (casting da nullable).
modificato la mia domanda. Il mio problema è che non posso restituire un datetime Nullable. La riga 'Convert.ChangeType' non può vedere che l'argomento passato sia annullabile – Odys