Partager via


Erreurs et avertissements liés aux méthodes d’extension déclarées avec this des paramètres ou extension des blocs

  • CS1100 : La méthode a un modificateur de paramètre 'this' qui n’est pas sur le premier paramètre
  • CS1101 : Le modificateur de paramètre 'ref' ne peut pas être utilisé avec 'this'.
  • CS1102 : Le modificateur de paramètre 'out' ne peut pas être utilisé avec 'this'.
  • CS1103 : Le premier paramètre d’une méthode d’extension ne peut pas être d’un type de pointeur.
  • CS1105 : Les méthodes d’extension doivent être statiques.
  • CS1106 : Les méthodes d’extension doivent être définies dans une classe statique non générique.
  • CS1109 : Les méthodes d’extension doivent être définies sur les classes statiques de niveau supérieur, « name » est une classe imbriquée.
  • CS1110 : Impossible de définir une nouvelle extension, car le type ExtensionAttribute requis du compilateur est introuvable. Vous manquez une référence à System.Core.dll?
  • CS1112 : N’utilisez pas «ExtensionAttribute ». Utilisez plutôt le mot clé 'this .
  • CS1113 : La méthode d’extension définie sur un type valeur ne peut pas être utilisée pour créer des délégués.
  • CS1743 : Impossible de spécifier une valeur par défaut pour le paramètre « this ».
  • CS9281 : Les déclarations d’extension peuvent ne pas avoir de nom.
  • CS9282 : Les déclarations d’extension peuvent inclure uniquement des méthodes ou des propriétés.
  • CS9283 : Les extensions doivent être déclarées dans une classe statique de niveau supérieur, non générique et statique.
  • CS9284 : Le paramètre récepteur d’une extension ne peut pas avoir de valeur par défaut.
  • CS9285 : Un conteneur d’extension ne peut avoir qu’un seul paramètre de récepteur.
  • CS9287 : Un paramètre de récepteur ne peut pas avoir le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9288 : un paramètre, une variable locale ou une fonction locale ne peut pas avoir le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9289 : le paramètre de type membre a le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9290 : un paramètre, une variable locale ou une fonction locale ne peut pas avoir le même nom qu’un paramètre d’extension.
  • CS9291 : 'value : un nom de paramètre généré automatiquement est en conflit avec un nom de paramètre d’extension.
  • CS9292 : un paramètre de type porte le même nom qu’un paramètre d’extension.
  • CS9293 : Impossible d’utiliser un paramètre d’extension dans ce contexte.
  • CS9294 : 'value : un nom de paramètre généré automatiquement est en conflit avec un nom de paramètre de type d’extension.
  • CS9295 : Le type étendu doit référencer tous les paramètres de type déclarés par l’extension, mais aucun paramètre de type n’est référencé.
  • CS9300 : le paramètre récepteur 'ref d’un bloc d’extension doit être un type valeur ou un type générique contraint à struct.
  • CS9301 : Le paramètre récepteur 'in' ou 'ref readonly' de l’extension doit être un type de valeur concret (non générique).
  • CS9302 : nouveau membre protégé déclaré dans un bloc d’extension.
  • CS9303 : Impossible de déclarer des membres d’instance dans un bloc d’extension avec un paramètre de récepteur sans nom.
  • CS9304 : Impossible de déclarer des accesseurs init uniquement dans un bloc d’extension.
  • CS9305 : Impossible d’utiliser des modificateurs sur le paramètre récepteur non nommé du bloc d’extension.

Erreurs courantes sur les déclarations d’extension

Le compilateur émet ces erreurs lorsque vous enfreintz les règles qui s’appliquent à toutes les déclarations de membre d’extension, quelle que soit la syntaxe choisie :

  • CS1102 : Le modificateur de paramètre 'out' ne peut pas être utilisé avec 'this'.
  • CS1106 : Les méthodes d’extension doivent être définies dans une classe statique non générique.
  • CS1103 : Le premier paramètre d’une méthode d’extension ne peut pas être d’un type de pointeur.
  • CS1109 : Les méthodes d’extension doivent être définies sur les classes statiques de niveau supérieur, « name » est une classe imbriquée.
  • CS1113 : La méthode d’extension définie sur un type valeur ne peut pas être utilisée pour créer des délégués.
  • CS1743 : Impossible de spécifier une valeur par défaut pour le paramètre « this ».
  • CS9283 : Les extensions doivent être déclarées dans une classe statique de niveau supérieur, non générique et statique.
  • CS9284 : Le paramètre récepteur d’une extension ne peut pas avoir de valeur par défaut.
  • CS9285 : Un conteneur d’extension ne peut avoir qu’un seul paramètre de récepteur.

Toute déclaration d’extension doit respecter ces règles :

  • Son type contenant (class ou struct) doit être non générique et static.
  • Son type conteneur doit être un type de niveau supérieur. Il ne peut pas être imbriqué dans un autre type.
  • Les membres qui étendent une instance d’un type valeur ne peuvent pas être convertis en délégués.
  • Le paramètre récepteur ne peut pas inclure le modificateur de out paramètre.
  • Le paramètre récepteur ne peut pas avoir de valeur d’argument par défaut.
  • Les types de pointeur ne peuvent pas être étendus. En d’autres termes, le paramètre auquel vous appliquez le this modificateur ne peut pas être un type de pointeur.

Ces erreurs sont spécifiques aux blocs d’extension, une fonctionnalité C# 14. Les blocs d’extension sont déclarés à l’aide du extension mot clé dans une classe statique. Le extension déclare le type et le nom du récepteur. Tous les membres à l’intérieur du bloc déclaré avec extension sont des membres d’extension de ce récepteur :

  • CS9281 : Les déclarations d’extension peuvent ne pas avoir de nom.
  • CS9282 : Les déclarations d’extension peuvent inclure uniquement des méthodes ou des propriétés.
  • CS9287 : Un paramètre de récepteur ne peut pas avoir le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9288 : un paramètre, une variable locale ou une fonction locale ne peut pas avoir le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9289 : le paramètre de type membre a le même nom qu’un paramètre de type de conteneur d’extension.
  • CS9290 : un paramètre, une variable locale ou une fonction locale ne peut pas avoir le même nom qu’un paramètre d’extension.
  • CS9291 : 'value : un nom de paramètre généré automatiquement est en conflit avec un nom de paramètre d’extension.
  • CS9292 : un paramètre de type porte le même nom qu’un paramètre d’extension.
  • CS9293 : Impossible d’utiliser un paramètre d’extension dans ce contexte.
  • CS9294 : 'value : un nom de paramètre généré automatiquement est en conflit avec un nom de paramètre de type d’extension.
  • CS9295 : Le type étendu doit référencer tous les paramètres de type déclarés par l’extension, mais aucun paramètre de type n’est référencé.
  • CS9300 : le paramètre récepteur 'ref d’un bloc d’extension doit être un type valeur ou un type générique contraint à struct.
  • CS9301 : Le paramètre récepteur 'in' ou 'ref readonly' de l’extension doit être un type de valeur concret (non générique).
  • CS9302 : nouveau membre protégé déclaré dans un bloc d’extension.
  • CS9303 : Impossible de déclarer des membres d’instance dans un bloc d’extension avec un paramètre de récepteur sans nom.
  • CS9304 : Impossible de déclarer des accesseurs init uniquement dans un bloc d’extension.
  • CS9305 : Impossible d’utiliser des modificateurs sur le paramètre récepteur non nommé du bloc d’extension.

Les déclarations d’extension doivent respecter ces règles :

  • L’extension ne peut pas inclure de jeton de nom. L’extension déclare le récepteur uniquement.
  • Le paramètre récepteur ne peut pas avoir de valeur par défaut.

Les membres d’extension déclarés dans un bloc d’extension doivent respecter ces règles, en plus des règles courantes :

  • Seules les méthodes et les propriétés sont des types de membres d’extension valides. Les membres d’extension peuvent étendre une instance ou un type.
  • L’extension doit fournir un nom de paramètre pour le récepteur afin de contenir des membres qui étendent une instance.
  • Le nom du paramètre de récepteur doit être unique dans ce bloc d’extension.
  • Tous les membres d’extension doivent utiliser tous les paramètres de type déclarés sur l’extension. Ils peuvent ajouter d’autres paramètres de type.

Ces erreurs sont spécifiques aux méthodes d’extension où vous déclarez le récepteur en ajoutant le this modificateur au premier paramètre de la méthode :

  • CS1100 : La méthode a un modificateur de paramètre 'this' qui n’est pas sur le premier paramètre
  • CS1101 : Le modificateur de paramètre 'ref' ne peut pas être utilisé avec 'this'.
  • CS1105 : Les méthodes d’extension doivent être statiques.
  • CS1110 : Impossible de définir une nouvelle extension, car le type ExtensionAttribute requis du compilateur est introuvable. Vous manquez une référence à System.Core.dll?
  • CS1112 : N’utilisez pas «ExtensionAttribute ». Utilisez plutôt le mot clé 'this .

Une méthode d’extension où l’instance de récepteur inclut le this modificateur doit respecter ces règles, en plus des règles courantes :

  • La méthode doit avoir le static modificateur.
  • Le this modificateur de paramètre doit être appliqué au premier paramètre. Elle ne peut pas être appliquée à d’autres paramètres sur la méthode.
  • Le refout modificateur de paramètre ne peut pas être appliqué au premier paramètre. Pour appliquer ref, vous devez effectuer une conversion en bloc d’extension.
  • Dans les applications .NET Framework, System.Core.dll doit être ajouté en tant que référence.
  • Vous devez spécifier le this modificateur sur le premier paramètre. Vous ne pouvez pas utiliser l’attribut ExtensionAttribute directement à la place.