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

Wie können wir Werttypen, Nullable-Werttypen und Referenztypen in generischen C#-Einschränkungen unterscheiden?

Barbara Streisand
Freigeben: 2024-12-29 07:04:14
Original
515 Leute haben es durchsucht

How Can We Differentiate Value Types, Nullable Value Types, and Reference Types in C# Generic Constraints?

Unterscheidung von Werttypen von Referenztypen in generischen Einschränkungen

Beim Umgang mit generischen Typen ist häufig eine Unterscheidung zwischen Werttypen, nullbaren Werttypen und Referenztypen erforderlich. Betrachten Sie den folgenden Code:

static void Foo<T>(T a) where T : struct { } // 1

static void Foo<T>(T? a) where T : struct { } // 2
Nach dem Login kopieren

Dieser Code verarbeitet erfolgreich Werttypen (1) und nullfähige Werttypen (2). Der Versuch, Referenztypen (3) mithilfe der folgenden Einschränkung zu erkennen, führt jedoch nicht zu einer Kompilierung:

static void Foo<T>(T a) where T : class { } // 3
Nach dem Login kopieren

Die Fehlermeldung weist darauf hin, dass bereits ein Mitglied mit derselben Signatur vorhanden ist. Dieses Problem entsteht, weil Einschränkungen nicht Teil der Signatur sind, Parameter jedoch schon. Um dieses Problem zu lösen, können wir die Einschränkung in einen Parameter einfügen:

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 { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
Nach dem Login kopieren

Dieser Ansatz ermöglicht es uns, zwischen den drei Fällen zu unterscheiden.

Das obige ist der detaillierte Inhalt vonWie können wir Werttypen, Nullable-Werttypen und Referenztypen in generischen C#-Einschränkungen 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