Maison >développement back-end >C++ >Pourquoi ne puis-je pas attribuer des méthodes anonymes à « var » en C# ?

Pourquoi ne puis-je pas attribuer des méthodes anonymes à « var » en C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-02 17:10:42641parcourir

Why Can't I Assign Anonymous Methods to `var` in C#?

Limitations de l'affectation de méthodes anonymes à var

En C#, les méthodes anonymes offrent un moyen pratique de définir des fonctions en ligne. Bien que ces méthodes puissent être facilement attribuées à des types délégués, tenter de les attribuer à des variables typées implicitement (à l'aide de var) entraîne souvent des erreurs de compilation.

Considérez l'exemple de code suivant :

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

Ce code est compilé avec succès, car la méthode anonyme est explicitement affectée à un Func déléguer. Cependant, le code suivant génère une erreur de compilation :

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

Erreur :

Impossible d'attribuer une méthode anonyme à une variable locale implicitement typée.

Cette erreur se produit car le le compilateur ne peut pas déduire le type de la méthode anonyme. Il existe un nombre infini de types de délégués possibles qu'il pourrait représenter, notamment Func, Predicate, Action et d'innombrables autres.

De plus, même si le compilateur a déduit Func en tant que type de délégué prévu, cela créerait des incohérences dans les cas où la méthode anonyme a un nombre différent de paramètres. Par exemple, le code suivant serait également compilé en Func délégué :

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};

Cependant, cela n'a pas de sens car Func les délégués ne prennent en charge que jusqu'à quatre arguments dans .NET 3.5.

Pour résoudre ce problème et garantir que la méthode anonyme est compilée avec le type de délégué correct, il est nécessaire de spécifier explicitement le type de délégué dans l'instruction d'affectation, comme on le voit dans le premier exemple de code.

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