Ich schreibe eine Funktion, die überprüft, ob eine Ausgabe DBNull
ist, und gibt null zurück, wenn der generische Typ nullfähig ist. Wenn nicht, wird einfach der Fehler ausgelöst.Gibt null zurück, wenn der generische Typ nullfrei sein kann
Update: hinzugefügt Alle Empfehlungen
public T Get<T>(string key)
{
int ordinal = reader.GetOrdinal(key);
if (reader.IsDBNull(ordinal))
{
if (typeof(T).GetTypeInfo().IsValueType && Nullable.GetUnderlyingType(typeof(T)) == null) // isn't a nullable field
throw new InvalidCastException();
else return default(T);
}
return reader.GetFieldValue<T>(ordinal);
}
Jedoch habe ich, wenn default(T)
kehrt null für jeden Nullable-Feld bin nicht sicher. Wenn es jetzt einen anderen Weg gibt, es null zurückgeben zu lassen?
Ich bin nicht sicher, ob 'reader.GetFieldType (key) 'würde normalerweise' DBNull' zurückgeben - funktioniert das überhaupt? Ich würde * erwarten *, dass etwas zurückgegeben wird, das darstellt, was die Spalte enthalten würde * wenn es nicht null wäre * –
Genau wie ein Vorschlag (zusätzlich zu Marc's Antwort/Kommentar), invertiere die 'if' Anweisung (wenn es * nicht ist * null, 'return ...;'), und entferne die 'else's für nur einen' throw ...; ' –