Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article traite des erreurs et des avertissements suivants du compilateur :
- CS8108 : Impossible de passer l’argument avec un type dynamique au paramètre params 'parameter' de la fonction locale 'method'.
- CS8112 : la fonction locale 'method' doit déclarer un corps, car il n’est pas marqué 'static extern'.
- CS8321 : La fonction locale 'method' est déclarée mais jamais utilisée
- CS8421 : une fonction locale statique ne peut pas contenir de référence à « variable ».
- CS8422 : une fonction locale statique ne peut pas contenir de référence à « this » ou « base ».
Les fonctions locales ont été ajoutées dans C# 7.0. Ils vous permettent de déclarer des méthodes utilitaires au sein d’un autre membre. Les diagnostics présentés dans cet article couvrent les déclarations de fonctions locales, les appels, leur utilisation et les restrictions supplémentaires en matière de capture pour les fonctions locales static.
Corps de fonction local
- CS8112 : la fonction locale 'method' doit déclarer un corps, car il n’est pas marqué 'static extern'.
Une déclaration de fonction locale doit inclure un corps, sauf si la fonction locale est déclarée static extern. Ajoutez un corps de bloc ou un corps d’expression à la fonction locale. Si l’implémentation est fournie en externe, marquez la fonction static extern locale et vérifiez que la déclaration suit les règles des méthodes externes.
Paramètres « params » et arguments dynamiques
- CS8108 : Impossible de passer l’argument avec un type dynamique au paramètre params 'parameter' de la fonction locale 'method'.
Un appel de fonction local ne peut pas passer un dynamic argument à un params paramètre. Convertissez la valeur en type d’élément ou type de tableau attendu par le params paramètre avant l’appel. Vous pouvez également stocker les valeurs dans un tableau typé explicitement et passer ce tableau à la fonction locale.
Fonctions locales inutilisées
- CS8321 : La fonction locale 'method' est déclarée mais jamais utilisée
Le compilateur signale cet avertissement lorsque vous déclarez une fonction locale, mais qu’aucun code accessible ne l’appelle. Supprimez la fonction locale inutilisée ou appelez-la du membre englobant. Si vous envisagez d’utiliser la fonction locale dans une modification ultérieure, conservez-la hors de la source jusqu’à ce qu’elle soit nécessaire.
Les fonctions locales statiques ne peuvent pas capturer l’état
- CS8421 : une fonction locale statique ne peut pas contenir de référence à « variable ».
- CS8422 : une fonction locale statique ne peut pas contenir de référence à « this » ou « base ».
Une static fonction locale ne peut pas capturer l’état à partir de l’étendue englobante. Il ne peut pas faire référence à des variables locales, à des paramètres ni à des membres d’instance de la portée englobante via this, ni à this lui-même. Transmettez chaque valeur dont la fonction locale a besoin en tant que paramètre (CS8421, CS8422). Si la fonction locale doit capturer des variables ou un état d’instance de l’étendue englobante, supprimez le static modificateur.
L’exemple suivant montre les références qui provoquent l’erreur CS8422 :
public class C
{
private int counter = 1;
public void IncreaseCounter()
{
static void LocalFunc(int addition)
{
this.counter += addition; // CS8422
base.ToString(); // CS8422
counter += addition; // CS8422: implicit this
ToString(); // CS8422: implicit base
}
LocalFunc(10);
}
}
Pour corriger CS8422, transmettez les données d’instance requises à la fonction locale, déplacez l’assistance en dehors du contexte de l’instance ou supprimez static lorsque la fonction locale doit accéder à l’état de l’instance.
Diagnostics associés
- Pour plus d’informations sur les fonctions locales dans les arborescences d’expressions, consultez Certaines expressions sont interdites dans les arborescences d’expressions dans les messages du compilateur C#.
- Pour plus d’informations sur les fonctions locales avec des paramètres de type générique, consultez Résoudre les erreurs et avertissements liés aux paramètres de type générique et aux arguments de type dans les messages du compilateur C#.
- Pour plus d’informations sur les attributs sur les fonctions locales, consultez Résoudre les erreurs et les avertissements qui impliquent la déclaration d’attribut et l’utilisation d’attributs dans votre code dans les messages du compilateur C#.
- Pour plus d’informations sur les variables capturées dans les fonctions anonymes, consultez les erreurs d’expression lambda et les avertissements dans les messages du compilateur C#.
- Pour plus d’informations sur les captures dans les constructeurs et les constructeurs principaux, consultez Résoudre les erreurs liées aux déclarations de constructeur et aux initialiseurs de module dans les messages du compilateur C#.