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
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
Beispielverwendung
int x = 1; int? y = 2; string z = "a"; Foo(x); // Value type Foo(y); // Nullable value type Foo(z); // Reference type
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!