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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage