Cet article explore les défis liés à l'implémentation de l'inférence de type en C#, en se concentrant sur les limitations et solutions potentielles pour l'inférence de type générique partielle.
Le cas d'utilisation décrit C'est là qu'une méthode d'extension doit être disponible pour une classe de base spécifique, avec des paramètres génériques liés à un argument de méthode. Cependant, la méthode d'extension doit également renvoyer un type spécifique lié au descendant particulier sur lequel elle est invoquée.
En fin de compte, l'inférence de type générique partielle n'est pas directement prise en charge en C# . Cependant, il existe des stratégies qui peuvent obtenir un résultat similaire.
Méthode 1 : Utilisation de contraintes de type
Une syntaxe similaire au code souhaité peut être obtenu en utilisant des contraintes de type :
public static TReg Parameter<TReg, T>(this TReg p, string name, T value) where TReg : ParameterizedRegistrationBase
Cette approche nécessite de spécifier à la fois des arguments de type génériques lors de l'invocation, ce qui peut ne pas être souhaitable dans tous les cas.
Méthode 2 : Utiliser deux fonctions avec Wrapper
Cette approche consiste à diviser l'opération en deux fonctions :
public static ThatAreWrapper<TSource> That<TSource>(this IEnumerable<TSource> source) { return new ThatAreWrapper<TSource>(source); } public class ThatAreWrapper<TSource> { // ... Implementation }
Et :
listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
Cette solution de contournement nécessite des étapes supplémentaires, mais permet plus de flexibilité dans la spécification le type de résultat.
Méthode 3 : Extension de la classe de base
En introduisant les méthodes d'extension directement dans la classe de base, le problème peut être évité. Cependant, cette approche supprime la possibilité d'utiliser les méthodes d'extension sur d'autres classes à l'avenir.
L'inférence de type générique partielle n'est pas directement prise en charge en C#, mais il existe des solutions de contournement qui peuvent fournir fonctionnalité similaire. L'approche spécifique à utiliser dépend des exigences spécifiques et des compromis impliqués.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!