Lösa varningar som rör användning av namnområden
Den här artikeln beskriver följande kompilatorfel:
- CS0138: Error: A using namespace directive can only be applied to namespaces; "type" är en typ som inte är ett namnområde.
- CS0431: Fel: Det går inte att använda aliaset "identifierare" med
::
eftersom aliaset refererar till en typ. Använd.
i stället. - CS0432: Fel: Aliaset "identifierare" hittades inte.
- CS0576: Fel: Namnområdets namnområde innehåller en definition som är i konflikt med aliaset "identifierare".
- CS0687: Fel: Namnområdesaliaskvalificeraren
::
matchar alltid en typ eller ett namnområde, så det är inte tillåtet här. Överväg att använda.
i stället. - CS1529: Fel: En användningssats måste föregå alla andra element som definierats i namnområdet förutom externa aliasdeklarationer.
- CS1537: Fel: Aliaset "alias" visades tidigare i det här namnområdet.
- CS7000: Fel: Oväntad användning av ett aliasnamn.
- CS7007: Fel: Ett
using static
direktiv kan endast tillämpas på typer. Överväg ettusing namespace
direktiv i stället - CS8083: Fel: Ett aliasbevalt namn är inte ett uttryck.
- CS8085: Fel: Ett "använda statiskt" direktiv kan inte användas för att deklarera ett alias.
- CS8914: Fel: Ett globalt användningsdirektiv kan inte användas i en namnområdesdeklaration.
- CS8915: Fel: Ett globalt användningsdirektiv måste föregå alla icke-globala användningsdirektiv.
- CS9055: Fel: En fillokal typ kan inte användas i ett "globalt med statiskt" direktiv.
- CS9130: Fel: Användning av alias kan inte vara en
ref
typ. - CS9131: Fel: Endast ett använda alias kan vara
unsafe
. - CS9132: Fel: Användning av alias kan inte vara en referenstyp som kan ogiltigförklaras.
- CS9133: Fel:
static
modifieraren måste föregåunsafe
modifieraren. - CS9162: Typen är inte giltig för "användning av statisk". Endast en klass, struct, gränssnitt, uppräkning, ombud eller namnrymd kan användas.
Och följande kompilatorvarningar:
- CS0105: Varning: Användningsdirektivet för "namnområde" visades tidigare i det här namnområdet.
- CS0440: Varning: Det är inte klokt att definiera ett alias med namnet
global
eftersomglobal::
det alltid refererar till det globala namnområdet och inte ett alias. - CS8019: Info: Onödig användning av direktiv.
- CS8933: Info: Användningsdirektivet visades tidigare som global användning.
Dessa fel och varningar indikerar att du är ett direktiv som inte har skapats using
korrekt. Följande avsnitt beskriver dessa fel och hur du korrigerar dem.
Använda direktiv
Direktivet using
måste föregå andra element i en namespace
deklaration eller före eventuella namespace
deklarationer i filen. Om du lägger till ett using
direktiv senare i filen genereras felet CS1529 av kompilatorn:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Åtgärda problemet genom att flytta eventuella using
deklarationer överst i filen eller överst i namnområdet:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Kompilatorn genererar varning cs8933, CS0105 eller diagnostik CS8019 för ett duplicerat using
direktiv från ett using
eller global using
ett direktiv. Du kan ta bort eventuella dubbletter.
En felaktig kombination av ett using
direktiv med static
, global
eller unsafe
modifierare för ett using
direktiv beskrivs senare i den här artikeln.
Använda statiskt direktiv
Direktivet using static
importerar en typs medlemmar till det aktuella namnområdet. I följande exempel importeras metoderna från System.Console
, till exempel WriteLine
till det aktuella namnområdet:
using static System.Console;
Kompilatorn genererar CS0138 om du utelämnar static
modifieraren:
using System.Console; // CS0138
Kompilatorn genererar CS7007 om du inkluderar static
den modifierare som importerar namnområdet i stället för en typ:
using static System; // CS7007
Kompilatorn genererar CS9162 om symbolen inte är någon av rätt typer.
Om du kombinerar static
modifieraren med unsafe
modifieraren i ett using
direktiv static
måste modifieraren komma först:
using static unsafe UnsafeExamples.UnsafeType;
Globalt användningsdirektiv
Ett global using
direktiv importerar namnområdet eller skriver in alla källfiler i det aktuella projektet:
global using System.Text;
Alla global using
direktiv måste föregå alla icke-globala using
direktiv i källfilen och får inte placeras i en namespace
. Detta resulterar i CS8915respektive CS8914.
Dessutom kan ett static global using
direktiv inte referera till en fillokal typ.
Aliaskval
Aliaskvalificeraren, ::
, föregår ett namnområdesalias eller följer aliaset global
. Om du använder ::
var .
ska användas för att avgränsa element med ett fullständigt kvalificerat namn genererar kompilatorn en av CS0431, CS0432, CS0687, *CS7000 eller CS8083.
Ersätt i alla fall ::
med .
avgränsaren.
Om du definierar ett alias med namnet global
utfärdar kompilatorn dessutom CS0440. Aliaset global
refererar alltid till det globala namnområdet. Att deklarera ett alias för det fungerar inte och du bör välja ett annat namn för ditt alias.
Aliasnamnkonflikter
Du kan deklarera ett alias till ett namnområde eller en typ med ett using
direktiv:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Du bör försöka skapa ett unikt namn för aliaset, namnet till vänster om =
tecknet i föregående exempel. Om du använder ett namn som redan mappas till en typ (till exempel Object
) eller ett namnområde (System
) kan det orsaka CS0576 eller CS1537.
Begränsningar för användning av alias
Före C# 12 införde språket dessa begränsningar för using
direktiv som skapar ett alias för en typdeklaration:
Du kan inte skapa ett alias med ett
using static
direktiv:using static con = System.Console; using static unsafe ip = int*;
Från och med C# 12 införs dessa begränsningar:
Du kan inte använda
in
modifierarna ,ref
ellerout
i ett alias:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Ett
unsafe using
direktiv måste ange ett alias eller ettstatic 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
Du kan inte skapa ett alias till en nullbar referenstyp:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed