Névterek használatával kapcsolatos figyelmeztetések elhárítása
Ez a cikk a következő fordítóhibákat ismerteti:
- CS0138: Hiba: A névtér-direktívát csak névterekre lehet alkalmazni; A "type" egy típus, amely nem névtér.
- CS0431: Hiba: Az alias "azonosító" nem használható,
::
mivel az alias egy típusra hivatkozik. Használja.
inkább. - CS0432: Hiba: Az alias "azonosítója" nem található.
- CS0576: Hiba: A névtér "névtér" olyan definíciót tartalmaz, amely ütközik az alias "azonosítójával".
- CS0687: Hiba: A névtér alias-minősítője
::
mindig egy típusra vagy névtérre oldódik fel, ezért itt érvénytelen. Fontolja meg a használatát.
. - CS1529: Hiba: A névtérben definiált összes többi elem előtt egy használó záradéknak kell lennie, kivéve az extern alias deklarációkat.
- CS1537: Hiba: Az alias használata korábban ebben a névtérben jelent meg.
- CS7000: Hiba: Az aliasnév váratlan használata.
- CS7007: Hiba: Irányelv
using static
csak típusokra alkalmazható. Fontolja meg inkább az irányelveketusing namespace
- CS8083: Hiba: Az alias által minősített név nem kifejezés.
- CS8085: Hiba: A "statikus" direktíva nem használható alias deklarálásához.
- CS8914: Hiba: A névtér-deklarációban nem használható globális felhasználási irányelv.
- CS8915: Hiba: A globális használatról szóló irányelvnek megelőznie kell az összes nem globális irányelvet.
- CS9055: Hiba: A fájl helyi típusa nem használható a "globális statikust használó" irányelvben.
- CS9130: Hiba: Az alias használata nem lehet
ref
típus. - CS9131: Hiba: Csak egy aliast használó lehet
unsafe
. - CS9132: Hiba: Az alias használata nem lehet null értékű hivatkozástípus.
- CS9133: Hiba:
static
a módosítónak a módosító előttunsafe
kell lennie. - CS9162: A típus nem érvényes a "statikus használathoz". Csak osztály, struktúra, interfész, enum, delegált vagy névtér használható.
És a következő fordítói figyelmeztetések:
- CS0105: Figyelmeztetés: A névtérre vonatkozó használati irányelv korábban ebben a névtérben jelent meg.
- CS0440: Figyelmeztetés: Az elnevezett
global
alias meghatározása nem ajánlott, mivelglobal::
mindig a globális névtérre hivatkozik, nem pedig aliasra. - CS8019: Információ: Szükségtelen az irányelv használata.
- CS8933: Info: A használat direktíva korábban globálisként jelent meg.
Ezek a hibák és figyelmeztetések azt jelzik, hogy a using
direktíva nem megfelelően van kialakítva. A következő szakaszok ezeket a hibákat és azok kijavítása módját ismertetik.
Irányelv használata
Az using
irányelvnek meg kell előznie a namespace
deklaráció bármely más elemét, vagy az aktában szereplő bármely namespace
nyilatkozat előtt. Ha később helyez el egy using
irányelvet a fájlban, a fordító CS1529-et eredményez:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
A probléma megoldásához helyezze át using
a deklarációkat a fájl tetejére vagy a névtér tetejére:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
A fordító cs8933, CS0105 vagy diagnosztikai CS8019 figyelmeztetést állít elő egy vagy global using
több using
irányelv ismétlődő using
irányelvéhez. Az ismétlődéseket eltávolíthatja.
Az irányelv és az unsafe
static
global
irányelv módosítóinak using
helytelen kombinálása using
a jelen cikk későbbi részében található.
Statikus irányelv használata
Az using static
irányelv egy típus tagjait importálja az aktuális névtérbe. Az alábbi példa importálja a metódusokat System.Console
például WriteLine
az aktuális névtérbe:
using static System.Console;
A fordító cs0138-at hoz létre, ha kihagyja a static
módosítót:
using System.Console; // CS0138
A fordító cs7007-et hoz létre, ha típus helyett a módosító importálja a static
névteret:
using static System; // CS7007
A fordító CS9162-t bocsát ki, ha a szimbólum nem a megfelelő típusok egyike.
Ha a static
módosító és a unsafe
módosító egy using
irányelvben szerepel, először a static
módosítónak kell lennie:
using static unsafe UnsafeExamples.UnsafeType;
Globális használatról szóló irányelv
Egy global using
irányelv importálja a névteret vagy a típust az aktuális projekt összes forrásfájljában:
global using System.Text;
Az global using
irányelveknek meg kell előznie a forrásfájlban lévő nem globális using
irányelveket, és nem helyezhetők el a namespace
forrásfájlban. Ennek eredménye a CS8915 és a CS8914.
Ezenkívül az static global using
irányelv nem hivatkozhat helyi fájltípusra.
Alias-minősítő
Az alias-minősítő megelőz ::
egy névtér-aliast, vagy követi az aliast global
. Ha a teljes név elemeinek elválasztásához hol kell használni::
, a fordító a CS0431, a CS0432, a CS0687, a *CS7000 vagy a CS8083 egyikét bocsátja ki..
Minden esetben cserélje le az ::
.
elválasztót.
Emellett, ha egy aliast határoz meg, global
a fordító cs0440-et ad ki. Az global
alias mindig a globális névtérre hivatkozik. Az alias deklarálása nem működik, és más nevet kell választania az aliashoz.
Aliasnévütközések
Az aliasokat névtérbe vagy egy irányelvvel rendelkező típusba using
deklarálhatja:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Meg kell próbálnia egyedi nevet létrehozni az aliashoz, az előző példákban a jel bal oldalán =
lévő nevet. Ha olyan nevet használ, amely már megfelel egy típusnak (például Object
) vagy egy névtérnek (System
), cs0576-ot vagy CS1537-et okozhat.
Az aliasok használatára vonatkozó korlátozások
A C# 12 előtt a nyelv előírta ezeket a korlátozásokat azokra az irányelvekre, using
amelyek aliast hoznak létre egy típusdeklarációhoz:
Nem hozhat létre aliast
using static
irányelvvel:using static con = System.Console; using static unsafe ip = int*;
A C# 12-től kezdődően a következő korlátozások vezetnek be:
A ,
ref
vagyout
módosítókat nem használhatjain
alias használatával:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Az
unsafe using
irányelvnek aliast vagystatic 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
Nem hozhat létre aliast null értékű hivatkozástípushoz:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed