Maison > développement back-end > C++ > C# peut-il implémenter une inférence de type générique partielle, et si oui, comment ?

C# peut-il implémenter une inférence de type générique partielle, et si oui, comment ?

Barbara Streisand
Libérer: 2024-12-31 02:55:09
original
492 Les gens l'ont consulté

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

L'inférence de type générique partielle peut-elle être implémentée en C# ?

Présentation

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 problème

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.

La solution

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.

Solutions pour l'inférence de type générique partielle

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
Copier après la connexion

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
}
Copier après la connexion

Et :

listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
Copier après la connexion

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.

Conclusion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal