333 Stimmen

Nullbarer Typ als allgemeiner Parameter möglich?

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X