Lorsque j'appelle une fonction et remplace l'un des paramètres par dynamique, le compilateur infère que le résultat de la fonction est dynamique. Je ne comprends pas pourquoi cela arrive.Inférence de type compilateur C# avec paramètres de fonction dynamique
Exemple: le type inféré pour une dynamique, de sorte que ce code compile, mais bien sûr échoue à l'exécution avec RuntimeBinderException:
dynamic b = "";
var a = MethodWithoutOverloads("", b);
a.DoesNotExist();
...
public string MethodWithoutOverloads(string a, string b) { ... }
Quelqu'un sait pourquoi le type inféré n'est pas le type de retour de la fonction?
EDIT: sous la direction de préciser ce qui se passe avec des méthodes sans
Cela se produit lorsque j'ai une méthode, c'est-à-dire lorsqu'il n'y a pas d'ambiguïté. String.Format n'est pas un bon exemple, mais l'inférence de type échoue également lorsque j'appelle ma propre méthode lorsqu'il n'y a pas d'ambiguïté. – Lev
@Lev C'est correct.* Techniquement * le compilateur peut être capable de le comprendre sans ambiguïté, mais je suppose que cela nécessiterait beaucoup plus de travail pour apparemment pas beaucoup de gain. Chaque fois que 'dynamic' fait partie d'une expression, le résultat sera aussi' dynamic'. Si vous êtes sûr de connaître le type, soyez simplement explicite avec le type de variable plutôt que d'utiliser 'var' – Rob
Ok donc, fondamentalement, c'est un cas de" nous n'avons pas implémenter l'inférence de type pour ce cas "... – Lev