Résolvez les avertissements liés à l’utilisation d’espaces de noms
Cet article traite des erreurs suivantes du compilateur :
- CS0138 : Erreur :une directive utilisant un espace de noms ne peut être appliquée qu’aux espaces de noms ; 'type' est un type et non un espace de noms.
- CS0431 : impossible d’utiliser l’alias 'identificateur' avec
::
, car l’alias référence un type. Utilisez.
à la place. - CS0432 : Erreur : alias 'identificateur' introuvable.
- CS0576 : Erreur : l’espace de noms 'espace de noms' contient une définition en conflit avec l’alias 'identificateur'.
- CS0687 : le qualificateur d’alias d’espace de noms
::
est toujours résolu en type ou en espace de noms ; il est donc non conforme ici. Envisagez plutôt d’utiliser.
à la place. - CS1529 : Erreur : une clause d’utilisation doit précéder tous les autres éléments définis dans l’espace de noms, à l’exception des déclarations d’alias externes.
- CS1537 : Erreur : l’alias d’utilisation 'alias' est apparu précédemment dans cet espace de noms.
- CS7000 : Erreur : utilisation inattendue d’un nom ayant un alias.
- CS7007 : Erreur : une directive
using static
ne peut être appliquée qu’aux types. Envisagez plutôt d’utiliser une directiveusing namespace
. - CS8083 : Erreur : un nom qualifié d’alias n’est pas une expression.
- CS8085 : Erreur : une directive 'utilisation d’un élément statique' ne peut pas être utilisée pour déclarer un alias.
- CS8914 : Erreur : une directive d’utilisation globale ne peut pas être utilisée dans une déclaration d’espace de noms.
- CS8915 : Erreur : une directive d’utilisation globale doit précéder toutes les directives d’utilisation non globales.
- CS9055 : Erreur : un type local de fichier ne peut pas être utilisé dans une directive 'utilisation statique globale'.
- CS9130 : Erreur : l’utilisation de l’alias ne peut pas être un type
ref
. - CS9131 : Erreur : seul un alias d’utilisation peut être
unsafe
. - CS9132 : Erreur : l’utilisation de l’alias ne peut pas être un type référence pouvant accepter la valeur Null.
- CS9133 : Erreur : le modificateur
static
doit précéder le modificateurunsafe
. - CS9162 : le type n’est pas valide pour 'utilisation statique'. Seuls une classe, un struct, une interface, une énumération, un délégué ou un espace de noms peuvent être utilisés.
Et les avertissements du compilateur suivants :
- CS0105 : Avertissement : la directive d’utilisation pour 'espace de noms' est apparue précédemment dans cet espace de noms.
- CS0440 : Avertissement : la définition d’un alias nommé
global
n’est pas judicieuse dans la mesure oùglobal::
fait toujours référence à l’espace de noms global et non à un alias. - CS8019 : Information : inutile d’utiliser la directive.
- CS8933 : Information : la directive d’utilisation apparaissait auparavant sous la forme d’une directive globale d’utilisation.
Ces erreurs et avertissements indiquent que votre directive using
n’est pas formée correctement. Les sections suivantes traitent de ces erreurs et de la façon de les corriger.
Directive d’utilisation
La directive using
doit précéder tous les autres éléments d’une déclaration namespace
ou avant les déclarations namespace
du fichier. Si vous placez une directive using
plus loin dans le fichier, le compilateur génère l’erreur CS1529 :
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Pour résoudre ce problème, déplacez les déclarations using
en haut du fichier ou en haut de l’espace de noms :
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Le compilateur génère l’avertissement CS8933, CS0105 ou le diagnostic CS8019 pour une directive using
dupliquée dans une directive using
ou global using
. Vous pouvez supprimer les doublons.
La combinaison incorrecte d’une directive using
avec les modificateurs static
, global
ou unsafe
sur une directive using
est abordée plus loin dans cet article.
Utilisation d’une directive statique
La directive using static
importe les membres d’un type dans l’espace de noms actuel. L’exemple suivant importe les méthodes à partir de System.Console
, comme WriteLine
dans l’espace de noms actuel :
using static System.Console;
Le compilateur génère CS0138 si vous omettez le modificateur static
:
using System.Console; // CS0138
Le compilateur génère CS7007 si vous incluez l’espace de noms static
d’importation du modificateur au lieu d’un type :
using static System; // CS7007
Le compilateur émet CS9162 si le symbole n’est pas l’un des types appropriés.
Si vous combinez le modificateur static
avec le modificateur unsafe
dans une directive using
, le modificateur static
doit passer en premier :
using static unsafe UnsafeExamples.UnsafeType;
Directive using globale
Une directive global using
importe l’espace de noms ou le type dans tous les fichiers sources du projet actuel :
global using System.Text;
Toutes les directives global using
doivent précéder les directives non globales using
dans ce fichier source et ne doivent pas être placées dans un namespace
. Cela aboutit respectivement aux CS8915 et CS8914.
En outre, une directive static global using
ne peut pas référencer un type de fichier local.
Qualificateur d’alias
Le qualificateur d’alias, ::
, précède un alias d’espace de noms ou suit l’alias global
. Si vous utilisez ::
où .
doit être utilisé pour séparer des éléments d’un nom complet, le compilateur émet l’un des éléments CS0431, CS0432, CS0687, *CS7000, ou CS8083.
Dans tous les cas, remplacez le ::
par le séparateur .
.
En outre, si vous définissez un alias nommé global
, le compilateur émet CS0440. L’alias global
fait toujours référence à l’espace de noms global. La déclaration d’un alias pour cela ne fonctionne pas, et vous devez choisir un autre nom pour votre alias.
Conflits de noms d’alias
Vous pouvez déclarer un alias vers un espace de noms ou à un type avec une directive using
:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Vous devez essayer de créer un nom unique pour l’alias, le nom à gauche du signe =
dans les exemples précédents. L’utilisation d’un nom qui est déjà mappé à un Type (par exemple Object
) ou à un espace de noms (System
) peut provoquer CS0576 ou CS1537.
Restrictions sur l’utilisation des alias
Avant C# 12, le langage imposait ces restrictions aux directives using
qui créent un alias pour une déclaration de type :
Vous ne pouvez pas créer d’alias avec une directive
using static
:using static con = System.Console; using static unsafe ip = int*;
À compter de C# 12, ces restrictions sont introduites :
Vous ne pouvez pas utiliser les modificateurs
in
,ref
ouout
dans un alias à l’aide de :// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Une directive
unsafe using
doit spécifier un alias ou unstatic using
:// Elsewhere: public namespace UnsafeExamples { public unsafe static class UnsafeType { // ... } } // Using directives: using unsafe IntPointer = int*; using static unsafe UnsafeExamples.UnsafeType; using unsafe UnsafeExamples; // not allowed
Vous ne pouvez pas créer d’alias pour un type référence pouvant accepter la valeur Null :
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed