Maison > développement back-end > C++ > Pourquoi l'inférence de type générique C# échoue-t-elle avec les contraintes d'interface ?

Pourquoi l'inférence de type générique C# échoue-t-elle avec les contraintes d'interface ?

DDD
Libérer: 2025-01-23 09:46:10
original
1027 Les gens l'ont consulté

Why Does C# Generic Type Inference Fail with Interface Constraints?

Limitations de l'inférence de type générique C#

Le mécanisme d'inférence de type de C# peut généralement déduire intelligemment les paramètres génériques des méthodes génériques. Cependant, l'inférence de type peut échouer dans certains cas, comme le montre l'exemple suivant :

<code class="language-csharp">interface IQuery<TResult> { }

interface IQueryProcessor
{
    TResult Process<TQuery, TResult>(TQuery query)
        where TQuery : IQuery<TResult>;
}

class SomeQuery : IQuery<string>
{ }</code>
Copier après la connexion

Dans le code ci-dessus, lors de l'appel de la méthode SomeQuery de IQueryProcessor à l'aide d'une instance Process, le compilateur est incapable de déduire les paramètres génériques corrects. Spécifier explicitement les paramètres résout ce problème :

<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>
Copier après la connexion

Raison de l'échec de l'inférence

Contrairement aux hypothèses initiales, les contraintes seules ne suffisent pas pour l'inférence de type. L'inférence de type de C# est entièrement basée sur les paramètres et leurs types de paramètres formels correspondants. Étant donné que le type de paramètre fourni est SomeQuery (qui implémente IQuery<string>), le compilateur ne peut pas automatiquement déduire que les paramètres génériques doivent être TQuery = SomeQuery et TResult = string.

Eric Lippert dans l'article "Les contraintes ne font pas partie de la signature" (https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal