Heim >Backend-Entwicklung >C++ >Kann C# eine partielle generische Typinferenz implementieren, und wenn ja, wie?

Kann C# eine partielle generische Typinferenz implementieren, und wenn ja, wie?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 02:55:09492Durchsuche

Can C# Implement Partial Generic Type Inference, and If So, How?

Kann partielle generische Typinferenz in C# implementiert werden?

Übersicht

Dieser Artikel untersucht die Herausforderungen der Implementierung von Typinferenz in C# und konzentriert sich dabei auf die Einschränkungen und mögliche Lösungen für partielle generische Typinferenz.

Das Problem

Der Anwendungsfall Beschrieben wird, wo eine Erweiterungsmethode für eine bestimmte Basisklasse verfügbar sein sollte, mit generischen Parametern, die sich auf ein Methodenargument beziehen. Allerdings sollte die Erweiterungsmethode auch einen bestimmten Typ zurückgeben, der sich auf den jeweiligen Nachkommen bezieht, auf den sie aufgerufen wird.

Die Lösung

Wie sich herausstellt, wird die partielle generische Typinferenz in C# nicht direkt unterstützt. . Es gibt jedoch Strategien, die ein ähnliches Ergebnis erzielen können.

Lösungen für partielle generische Typinferenz

Methode 1: Verwendung von Typbeschränkungen

Eine Syntax Der gewünschte Code kann mithilfe von Typeinschränkungen ähnlich sein:

public static TReg Parameter<TReg, T>(this TReg p, string name, T value)
    where TReg : ParameterizedRegistrationBase

Dieser Ansatz erfordert die Angabe von generischen Codes Geben Sie während des Aufrufs Argumente ein, was möglicherweise nicht in allen Fällen wünschenswert ist.

Methode 2: Verwendung von zwei Funktionen mit Wrapper

Dieser Ansatz beinhaltet die Aufteilung der Operation in zwei Funktionen:

public static ThatAreWrapper<TSource> That<TSource>(this IEnumerable<TSource> source)
{
    return new ThatAreWrapper<TSource>(source);
}

public class ThatAreWrapper<TSource>
{
    // ... Implementation
}

Und:

listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)

Diese Problemumgehung erfordert zusätzliche Schritte, ermöglicht aber mehr Flexibilität bei der Angabe des Ergebnistyps.

Methode 3: Erweitern der Basisklasse

Durch die Einführung der Erweiterungsmethoden direkt in die Basisklasse kann das Problem vermieden werden. Durch diesen Ansatz entfällt jedoch die Möglichkeit, die Erweiterungsmethoden in Zukunft für andere Klassen zu verwenden.

Fazit

Teilweise generische Typinferenz wird in C# nicht direkt unterstützt, es gibt jedoch Problemumgehungen, die bereitgestellt werden können ähnliche Funktionalität. Der spezifische Ansatz hängt von den spezifischen Anforderungen und den damit verbundenen Kompromissen ab.

Das obige ist der detaillierte Inhalt vonKann C# eine partielle generische Typinferenz implementieren, und wenn ja, wie?. 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