ich einen generischen KonverterKann nicht Typen in generischer Methode zum NULLABLE ändern
Hier ist ein Beispielcode des generischen Konverter zu schaffen
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;
}
Und das ist, wie ich es verwenden:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
Die geworfene Ausnahme besagt, dass sie nicht von DateTime
in Nullable<DateTime>
konvertieren kann. Da die Methode einen NULL-fähigen Typ erstellt und zurückgibt, wie schlägt das Casting fehl?
Am Ende möchte ich eine Nullable DateTime haben, in diesem speziellen Beispiel.
bearbeiten Das Problem ist, dass StringToNullableDatetime
Methode ein Datetime?
zurückkehrt und das Casting sagt, dass nicht von Datetime
konvertiert Da die StringToNullableDatetime
Methode eine Nullable-Datetime zurückgibt, wie es möglich ist, dass die Convert.ChangeType
nicht, dass die bestandenen sehen Argument ist nullfähig?
Ps. Ich habe Antworten wie this gelesen, die das Gegenteil tun (Casting von Nullable).
meine Frage bearbeitet. Mein Problem ist, dass ich keine nullbare Datetime zurückgeben kann. Die 'Convert.ChangeType'-Zeile kann nicht sehen, dass das übergebene Argument nullable ist – Odys