Heim >Backend-Entwicklung >C++ >Wie kann ich von einer generischen C#-Methode mit einem Typparameter T sicher Null zurückgeben?

Wie kann ich von einer generischen C#-Methode mit einem Typparameter T sicher Null zurückgeben?

Susan Sarandon
Susan SarandonOriginal
2025-01-09 17:26:43719Durchsuche

How Can I Safely Return Null from a C# Generic Method with a Type Parameter T?

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:

  1. 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 '.

  2. 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.

  3. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn