Heim >Backend-Entwicklung >C++ >Wie kann ich von einer generischen C#-Methode mit einem Typparameter T sicher Null zurückgeben?
Rückgabe eines Nullwerts von einer generischen Methode in C#
In generischen C#-Methoden ist es nicht immer einfach, null zurückzugeben, wenn der Typparameter ein Referenztyp oder ein Werttyp sein kann. Dieses Problem tritt auf, wenn der Rückgabetyp ein Typparameter T ist.
Bedenken Sie den folgenden Codeausschnitt:
<code class="language-csharp">static T FindThing<T>(IList collection, int id) where T : IThing, new() { foreach (T thing in collection) { if (thing.Id == id) return thing; } return null; // 错误:无法将 null 转换为类型参数“T”,因为它可能是值类型。请考虑改用“default(T)”代替。 }</code>
Dieser Code versucht, null zurückzugeben, wenn in der Sammlung kein passendes Element gefunden wird, aber ein Build-Fehler auftritt. Die Fehlermeldung besagt, dass Null nicht in den Typparameter T konvertiert werden kann, da T möglicherweise ein Werttyp ist.
Es gibt drei Möglichkeiten, dieses Problem zu lösen:
Einen Standardwert zurückgeben: Mit default(T)
können Sie einen Standardwert vom Typ T zurückgeben. Dies gibt null für Referenztypen und den entsprechenden Standardwert für Werttypen zurück, z. B. 0 für int und ' für char '.
T auf einen Referenztyp beschränken: Wenn Sie wissen, dass T nur ein Referenztyp sein kann, können Sie die where T : class
-Einschränkung zur Methodendeklaration hinzufügen. Dadurch können Sie wie gewohnt null zurückgeben.
Beschränken Sie T auf einen Nicht-Null-Werttyp: Wenn Sie wissen, dass T ein Nicht-Null-Werttyp sein wird, können Sie eine where T : struct
-Einschränkung hinzufügen und wie gewohnt Null zurückgeben. Beachten Sie, dass dies einen Nullwert eines nullbaren Werttyps und keinen Nullverweis zurückgibt.
Das obige ist der detaillierte Inhalt vonWie kann ich von einer generischen C#-Methode mit einem Typparameter T sicher Null zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!