Ich möchte etwas in dieser Art machen:
myYear = record.GetValueOrNull<int?>("myYear"),
Beachten Sie den nullbaren Typ als generischen Parameter.
Da die GetValueOrNull
Funktion null zurückgeben könnte, war mein erster Versuch dieser:
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : class
{
object columnValue = reader[columnName];
if (!(columnValue is DBNull))
{
return (T)columnValue;
}
return null;
}
Aber der Fehler, den ich jetzt bekomme, ist:
Der Typ 'int?' muss ein Referenztyp sein, damit er als Parameter 'T' im generischen Typ oder in der Methode verwendet werden kann
Genau! Nullable<int>
ist eine struct
! Also habe ich versucht, die Klassenbeschränkung in eine struct
Einschränkung (und kann als Nebeneffekt nicht zurückgeben null
nicht mehr):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Jetzt die Aufgabe:
myYear = record.GetValueOrNull<int?>("myYear");
Es wird der folgende Fehler angezeigt:
Der Typ 'int?' muss ein nicht-nullbarer Werttyp sein, damit er als Parameter 'T' im generischen Typ oder in der Methode verwendet werden kann.
Ist die Angabe eines nullbaren Typs als allgemeiner Parameter überhaupt möglich?