Megosztás a következőn keresztül:


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ányelveket using 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őtt unsafe 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, mivel global:: 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 unsafestaticglobalirá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.Consolepé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 namespaceforrá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, globala 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 típusba is deklarálhatja a következő irányelvvel:

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 , refvagy out módosítókat nem használhatja inalias használatával:

    // All these are invalid
    using RefInt = ref int;
    using OutInt = out int;
    using InInt = in int;
    
  • A unsafe felhasználói irányelvnek aliast vagy static 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