Ich möchte so etwas machen:
myYear = record.GetValueOrNull<int?>("myYear"),
Beachten Sie den nullbaren Typ als generischen Parameter.
Da die GetValueOrNull
Funktion null zurückgeben konnte, war mein erster Versuch folgender:
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, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode verwenden zu können
Richtig! Nullable<int>
ist ein struct
! Also habe ich versucht, die Klasseneinschränkung in eine struct
Einschränkung zu ändern (und als Nebeneffekt kann ich nicht null
mehr zurückkehren):
public static T GetValueOrNull<T>(this DbDataRecord reader, string columnName)
where T : struct
Nun die Aufgabe:
myYear = record.GetValueOrNull<int?>("myYear");
Gibt den folgenden Fehler aus:
Der Typ 'int?' muss ein nicht nullbarer Werttyp sein, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode zu verwenden
Ist es überhaupt möglich, einen nullbaren Typ als generischen Parameter anzugeben?
IDataRecord
vonDbDataRecord
..