Maison >développement back-end >C++ >Pourquoi les variables typées implicitement (« var ») ne peuvent-elles pas contenir de méthodes anonymes sans déclaration de type explicite ?

Pourquoi les variables typées implicitement (« var ») ne peuvent-elles pas contenir de méthodes anonymes sans déclaration de type explicite ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 19:25:10624parcourir

Why Can't Implicitly Typed Variables ('var') Hold Anonymous Methods Without Explicit Type Declaration?

Pourquoi les méthodes anonymes ne peuvent-elles pas être attribuées aux variables déduites du type implicite 'Var' ?

Considérez le code suivant :

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};

Ce code se compile avec succès car le type déduit de l'expression lambda est un Func délégué. Cependant, le code suivant ne compile pas :

var comparer = delegate(string value) {
    return value != "0";
};

Le compilateur ne peut pas déduire le type de délégué pour l'expression lambda dans ce cas. En effet, il existe une infinité de types de délégués possibles qui pourraient être déduits et le compilateur n'a pas suffisamment de contexte pour déterminer lequel est destiné.

Par exemple, l'expression lambda pourrait être de type Func, Prédicat ou Action. De plus, l'expression lambda peut être du type Expression>, qui représente un arbre d'expressionではなく、委任型です。

Pour résoudre ce problème, spécifiez explicitement le type de délégué pour le expression lambda :

var comparer = (Func<string, bool>)delegate(string value) {
    return value != "0";
};

Avec ce changement, le le code sera compilé avec succès et le type déduit de l'expression lambda sera Func.

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!

Déclaration:
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