Ist das Erstellen einer generischen C # -Methode, die (nullfähige) Werttypen und Referenztypen akzeptiert, möglich?
Ich möchte eine einfache Methode erstellen, die beides akzeptiertWertty undReferenzty -Parameter, d. h. int ist value und string ist reference.
So ist das, womit ich beginne:
public bool areBothNotNull<T>(T? p1, T? p2)
{
return (p1.HasValue && p2.HasValue);
}
So möchte ich es so benutzen können:
var r1 = areBothNotNull<int>(3, 4); // will be true
var r2 = areBothNotNull<int>(3, null); // will be false
var r3 = areBothNotNull<string>("three", "four"); // will be true
var r4 = areBothNotNull<string>(null, "four"); // will be false
Aber das erste Problem, auf das ich stoße, ist
Der Typ 'T' muss ein nicht nullwertfähiger Wert sein, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode 'System.Nullable' zu verwenden.Um fortzufahren, füge ich meiner Methode eine Strukturbedingung hinzu
public bool areBothNotNull<T>(T? p1, T? p2) where T : struct
Aber jetzt akzeptiert die Methode die auf Zeichenfolgen basierenden Aufrufe nicht und gibt mir diesen Fehler:
Der Typ 'string' muss ein nicht nullwertfähiger Wert sein, um ihn als Parameter 'T' im generischen Typ oder in der generischen Methode zu verwenden.Ist das möglich? Oder warum werden wir daran gehindert?