"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > C # peut-il implémenter l'inférence de type générique partiel, et si oui, comment?

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

Publié le 2025-03-22
Parcourir:388

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

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

Présentation

Cet article explore les défis de l'implémentation de l'inférence du type dans C #, se concentrant sur les limites et les solutions potentielles pour l'inférence générique partielle. décrit est où 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 qu'il est invoqué.

La solution

Il s'avère que l'inférence de type générique partiel n'est pas directement prise en charge dans C #. Cependant, il existe des stratégies qui peuvent obtenir un résultat similaire.

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

Méthode 1: Utilisation des contraintes de type

Une syntaxe similaire au code souhaité peut être réalisé en utilisant les contraintes de type: Public Static Paronter [et&&] Treg P, nom de chaîne, valeur t) Lorsque Treg: ParameterisingRegistingBase

Cette approche nécessite de spécifier à la fois des arguments de type générique pendant l'invocation, qui peuvent ne pas être souhaitables dans tous les cas. ThatArewrapper That (cette source ienumable ) { Renvoie un nouveau thatarewrapper (source); } classe publique qui awewrapper { // ... Mise en œuvre }
public static TReg Parameter(this TReg p, string name, T value)
    where TReg : ParameterizedRegistrationBase
et:

listoffruits.that (). Sont (). Where (banana => banana.peel! = Colore.black)

Ce travail de travail nécessite des étapes supplémentaires, mais permet une plus de flexibilité dans la méthode de la base. Classe

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.

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

public class ThatAreWrapper
{
    // ... Implementation
}

L'inférence de type générique partiel n'est pas directement prise en charge en C #, mais il existe des solutions de contournement qui peuvent fournir des fonctionnalités similaires. L'approche spécifique à utiliser dépend des exigences et des compromis spécifiques impliqués.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3