Heim > Backend-Entwicklung > C++ > Wie können generische Einschränkungen effektiv zwischen Werttypen, Nullable-Werttypen und Referenztypen in C# unterscheiden?

Wie können generische Einschränkungen effektiv zwischen Werttypen, Nullable-Werttypen und Referenztypen in C# unterscheiden?

Linda Hamilton
Freigeben: 2025-01-04 05:35:38
Original
964 Leute haben es durchsucht

How Can Generic Constraints Effectively Distinguish Between Value Types, Nullable Value Types, and Reference Types in C#?

Generische Einschränkungen zur Unterscheidung von Wert- und Referenztypen

In C# können generische Einschränkungen verwendet werden, um Einschränkungen für Typparameter durchzusetzen. Wenn Sie jedoch versuchen, zwischen Werttypen, nullbaren Werttypen und Referenztypen zu unterscheiden, reicht die Verwendung von Einschränkungen in der Typparameterdeklaration möglicherweise nicht aus.

Einschränkungen außerhalb der Typparameterdeklaration

Stattdessen besteht ein effektiverer Ansatz darin, die Einschränkung innerhalb einer Parameterdeklaration zu platzieren. Obwohl dies unkonventionell erscheinen mag, ermöglicht es eine Überlastungsauflösung basierend auf den Einschränkungen. Betrachten Sie den folgenden Code:

class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }

static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // Value type
static void Foo<T>(T? a) where T : struct { } // Nullable value type
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // Reference type
Nach dem Login kopieren

In diesem Code werden die Einschränkungen innerhalb der Parameterdeklarationen angegeben. Beim Aufruf von Foo für einen Werttyp (z. B. int) sind sowohl die erste als auch die zweite Foo-Methode sinnvoll. Die Methode mit der Werttypbeschränkung wird ausgewählt, weil sie einen nicht nullbaren Werttyp (RequireStruct) angibt. Ebenso ist beim Aufrufen von Foo für einen Referenztyp (z. B. eine Zeichenfolge) nur die dritte Foo-Methode sinnvoll, da sie eine Referenztypbeschränkung (RequireClass) angibt.

Beispielverwendung

int x = 1;
int? y = 2;
string z = "a";

Foo(x); // Value type
Foo(y); // Nullable value type
Foo(z); // Reference type
Nach dem Login kopieren

Mit diesem Ansatz können Sie bei der Überladungsauflösung effektiv zwischen Werttypen, nullbaren Werttypen und Referenztypen unterscheiden. Obwohl es unorthodox erscheinen mag, bietet es eine praktische Lösung für das Problem der Unterscheidung zwischen diesen verschiedenen Typen in generischen Methodendeklarationen.

Das obige ist der detaillierte Inhalt vonWie können generische Einschränkungen effektiv zwischen Werttypen, Nullable-Werttypen und Referenztypen in C# unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage