Risolvere gli avvisi correlati all’uso degli spazi dei nomi
Questo articolo illustra gli errori del compilatore seguenti:
- CS0138: Errore: una direttiva using namespace può essere applicata solo agli spazi dei nomi. 'Type' è un tipo, non uno spazio dei nomi.
- CS0431: Non è possibile usare l'alias 'identifier' con
::
perché l'alias fa riferimento a un tipo. Usare.
, in alternativa. - CS0432: Errore: alias 'identifier' non trovato.
- CS0576: Errore: lo spazio dei nomi 'namespace' contiene una definizione in conflitto con l'alias 'identifier'.
- CS0687: Errore: il qualificatore di alias
::
dello spazio dei nomi viene sempre risolto in un tipo o in uno spazio dei nomi e non è pertanto valido in questa posizione. Prendere in considerazione l’uso di.
, in alternativa. - CS1529: Errore: la clausola using deve precedere tutti gli altri elementi definiti nello spazio dei nomi ad eccezione delle dichiarazioni di alias extern.
- CS1537: Errore: l’alias using 'alias' è già presente in questo spazio dei nomi.
- CS7000: Errore: uso imprevisto di un nome con alias.
- CS7007: Errore: una direttiva
using static
può essere applicata solo ai tipi. Prendere in considerazione una direttivausing namespace
, in alternativa - CS8083: Errore: un nome qualificato come alias non è un'espressione.
- CS8085: Errore: non è possibile usare una direttiva 'using static' per dichiarare un alias.
- CS8914: Errore: una direttiva using globale non può essere usata in una dichiarazione dello spazio dei nomi.
- CS8915: Errore: una direttiva using globale deve precedere tutte le direttive using non globali.
- CS9055: Errore: un tipo locale di file non può essere usato in una direttiva 'global using static'.
- CS9130: Errore: using alias non può essere un tipo
ref
. - CS9131: Errore: solo using alias può essere
unsafe
. - CS9132: Errore: using alias non può essere un tipo riferimento nullable.
- CS9133: Errore: il modificatore
static
deve precedere il modificatoreunsafe
. - CS9162: Tipo non valido per 'using static'. È possibile usare solo classi, struct, interfacce, enumerazioni, delegati o spazi dei nomi.
Inoltre, è possibile usare gli avvisi del compilatore seguenti:
- CS0105: Avviso: la direttiva using per 'namespace' è già presente in questo spazio dei nomi.
- CS0440: Avviso: si consiglia di non assegnare il nome
global
a un alias perchéglobal::
fa sempre riferimento allo spazio dei nomi globale e non a un alias. - CS8019: Info: direttiva using non necessaria.
- CS8933: Info: la direttiva using è già presente come using globale.
Questi errori e avvisi indicano che la direttiva using
non è stata formata correttamente. Le sezioni seguenti illustrano tali errori e come correggerli.
Direttiva using
La direttiva using
deve precedere qualsiasi altro elemento in una dichiarazione namespace
o qualsiasi altra dichiarazione namespace
nel file. L'inserimento di una direttiva using
in un secondo momento nel file causa la generazione dell'errore CS1529 da parte del compilatore:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Per risolvere questo problema, spostare le dichiarazioni using
all'inizio del file o dello spazio dei nomi:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Il compilatore genera l'avviso CS8933, CS0105 o la diagnostica CS8019 per una direttiva using
duplicata da una direttiva using
o global using
. È possibile rimuovere eventuali duplicati.
La combinazione errata di una direttiva using
con i modificatori static
, global
o unsafe
in una direttiva using
viene descritta più avanti in questo articolo.
Direttiva using static
La direttiva using static
importa i membri di un tipo nello spazio dei nomi corrente. Nell'esempio seguente vengono importati i metodi da System.Console
, ad esempio WriteLine
nello spazio dei nomi corrente:
using static System.Console;
Il compilatore genera l'errore CS0138 se si omette il modificatore static
:
using System.Console; // CS0138
Il compilatore genera l'errore CS7007 se si include lo spazio dei nomi di importazione del modificatore static
anziché un tipo:
using static System; // CS7007
Il compilatore genera l’errore CS9162 se il simbolo non è uno dei tipi appropriati.
Se si combina il modificatore static
con il modificatoreunsafe
in una direttiva using
, il modificatore static
deve essere il primo:
using static unsafe UnsafeExamples.UnsafeType;
Direttiva using global
Una direttiva global using
importa lo spazio dei nomi o il tipo in tutti i file di origine nel progetto corrente:
global using System.Text;
Tutte le direttive global using
devono precedere le direttive non-global using
nel file di origine e non devono essere inserite in un namespace
. In questo modo si ottengono, rispettivamente, CS8915 e CS8914.
Inoltre, una direttiva static global using
non può fare riferimento a un tipo di file-locale.
Qualificatore alias
Il qualificatore alias ::
precede un alias dello spazio dei nomi o segue l'alias global
. Se si usa ::
al posto di .
per separare gli elementi di un nome completo, il compilatore genera un errore CS0431, CS0432, CS0687, *CS7000o CS8083.
In tutti i casi sostituire il ::
con il separatore .
.
Inoltre, se si definisce un alias denominato global
, il compilatore genera un errore CS0440. L'alias global
fa sempre riferimento allo spazio dei nomi globale. La dichiarazione di un alias a tale scopo è errato ed è necessario scegliere un nome diverso per l'alias.
Conflitti tra nomi di alias
È possibile dichiarare un alias in uno spazio dei nomi o in un tipo con una direttiva using:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
È consigliabile provare a creare un nome univoco per l'alias, ovvero il nome a sinistra dell'accesso =
negli esempi precedenti. L'uso di un nome già mappato a un tipo (ad esempio Object
) o a uno spazio dei nomi (System
) può causare un errore CS0576 o CS1537.
Restrizioni sull'uso di alias
Prima di C# 12, il linguaggio imponeva le restrizioni seguenti alle direttive using
che creano un alias per una dichiarazione di tipo:
Non è possibile creare un alias con una direttiva
using static
:using static con = System.Console; using static unsafe ip = int*;
A partire da C# 12, vengono introdotte le restrizioni seguenti:
Non è possibile usare i modificatori
in
,ref
oout
in un using alias:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Una direttiva using
unsafe
deve specificare un alias o 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
Non è possibile creare un alias per un tipo riferimento nullable:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per