Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
In diesem Artikel werden die folgenden Compilerfehler behandelt:
- CS0138: Fehler: Eine „using“-Namespaceanweisung kann nur auf Namespaces angewandt werden. „type“ ist ein Typ und kein Namespace.
-
CD0431: Fehler: Der Alias „Bezeichner“ kann nicht mit
::verwendet werden, da der Alias auf einen Typ verweist. Verwenden Sie stattdessen.. - CS0432: Fehler: Der Alias „Bezeichner“ wurde nicht gefunden.
- CS0576: Fehler: Der Namespace „Namespace“ enthält eine Definition, die mit dem Alias „Bezeichner“ in Konflikt steht.
-
CS0687: Fehler: Der Qualifizierer
::für den Namespacealias wird immer zu einem Typ oder Namespace aufgelöst und ist somit an dieser Stelle ungültig. Erwägen Sie stattdessen die Verwendung von.. - CS1529: Fehler: Eine „using“-Klausel muss allen anderen im Namespace definierten Elementen vorangehen, mit Ausnahme externer Aliasdeklarationen.
- CS1537: Fehler: Der „using“-Alias „alias“ ist bereits vorgängig in diesem Namespace aufgetreten.
- CS7000: Fehler: Unerwartete Verwendung eines Aliasnamens.
-
CS7007: Fehler: Eine
using static-Anweisung kann nur auf Typen angewendet werden. Erwägen Sie stattdessen eineusing namespace-Anweisung - CS8083: Fehler: Ein „alias“-qualifizierter Name ist kein Ausdruck.
- CS8085: Fehler: Eine „using static“-Anweisung kann nicht zum Deklarieren eines Alias verwendet werden.
- CS8914: Fehler: Eine „global using“-Anweisung kann nicht in einer Namespacedeklaration verwendet werden.
- CS8915: Fehler: Eine „global using“-Anweisung muss allen nicht-“global using“-Anweisungen vorangehen.
-
CS9130: Fehler: Der „using“-Alias darf nicht vom Typ
refsein. -
CS9131: Fehler: Nur ein „using“-Alias darf
unsafesein. - CS9132: Fehler: Der „using“-Alias darf kein Nullable-Verweistyp sein.
-
CS9133: Fehler: Der Modifizierer
staticmuss dem Modifiziererunsafevorangestellt sein. - CS9162: Typ ist für „using static“ ungültig. Es kann nur eine Klasse, Struktur, Schnittstelle, Enumeration, Delegat oder Namespace verwendet werden.
Und die folgenden Compilerwarnungen:
- CS0105: Warnung: Die „using“-Anweisung für „namespace“ ist bereits vorher in diesem Namespace aufgetreten.
-
CS0440: Warnung: Es sollte kein Alias mit dem Namen
globaldefiniert werden, daglobal::immer ein Verweis auf den globalen Namespace und nicht auf einen Alias ist. - CS8019: Information: Nicht erforderliche „using“-Anweisung.
- CS8933: Information: Die „using“-Anweisung wurde zuvor bereits als „global using“ verwendet.
Diese Fehler und Warnungen deuten darauf hin, dass die using-Anweisung nicht korrekt ist. In den folgenden Abschnitten werden diese Fehler und deren Behebung behandelt.
using-Anweisung
Die using-Anweisung muss vor allen anderen Elementen in einer namespace-Deklaration oder vor allen namespace-Deklarationen in der Datei stehen. Wenn Sie eine using-Anweisung später einfügen, generiert der Compiler den Fehler CS1529:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Um dieses Problem zu beheben, verschieben Sie alle using-Deklarationen an den Anfang der Datei oder an den Anfang des Namespace:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Der Compiler generiert die Warnung CS8933, CS0105 oder CS8019 für eine doppelte using-Anweisung aus einer using- oder global using-Anweisung. Duplikate können entfernt werden.
Informationen zu Fehlern bei der Kombination einer using-Anweisung mit den Modifizierern static, global oder unsafe in einer using-Anweisung finden Sie weiter unten in diesem Artikel.
„using static“-Anweisung
Die using static-Anweisung importiert die Member eines Typs in den aktuellen Namespace. Im folgenden Beispiel werden die Methoden aus System.Console (z. B. WriteLine) in den aktuellen Namespace importiert:
using static System.Console;
Der Compiler generiert den Fehler CS0138, wenn Sie den Modifizierer static weglassen:
using System.Console; // CS0138
Der Compiler generiert den Fehler CS7007, wenn Sie anstelle eines Typs den Modifizierer static für den importierten Namespace einschließen:
using static System; // CS7007
Der Compiler gibt CS9162 aus, wenn das Symbol keiner der richtigen Typen ist.
Wenn Sie den Modifizierer static mit dem Modifizierer unsafe in einer using-Anweisung kombinieren, muss der Modifizierer static zuerst angegeben werden:
using static unsafe UnsafeExamples.UnsafeType;
Globale using-Anweisung
Eine global using-Anweisung importiert den Namespace oder Typ in allen Quelldateien im aktuellen Projekt:
global using System.Text;
Sämtliche global using-Anweisungen müssen allen nicht globalen using-Anweisungen in der Quelldatei vorangestellt und dürfen nicht in einem namespace platziert werden. Andernfalls werden CS8915 bzw. CS8914 generiert.
Darüber hinaus kann eine static global using-Anweisung nicht auf einen dateilokalen Typ verweisen.
Aliasqualifizierer
Der Aliasqualifizierer (::) steht vor einem Namespacealias oder hinter dem global-Alias. Wenn Sie :: verwenden, wo eigentlich . verwendet werden sollte, um Elemente eines vollqualifizierten Namens zu trennen, gibt der Compiler einen der folgenden Fehler aus: CS0431, CS0432, CS0687, CS7000 oder CS8083.
Ersetzen Sie in allen Fällen :: durch das Trennzeichen ..
Wenn Sie außerdem einen Alias namens global definieren, gibt der Compiler CS0440 aus. Der global-Alias verweist immer auf den globalen Namespace. Sie können dafür keinen Alias deklarieren und sollten einen anderen Namen für Ihren Alias auswählen.
Konflikte bei Aliasnamen
Sie können mit einer -Direktive einen using für einen Namespace oder Typ deklarieren:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Sie sollten dem Alias einen eindeutigen Namen zuweisen – in den vorherigen Beispielen der Name links vom =-Zeichen. Die Verwendung eines Namens, der bereits einem Typ (z. B. Object) oder einem Namespace (System) zugeordnet ist, kann die Fehler CS0576 oder CS1537 verursachen.
Einschränkungen bei using-Aliasen
Vor C# 12 galten für die Programmiersprache bei using-Anweisungen, die einen Alias für eine Typdeklaration erstellen, die folgenden Einschränkungen:
Sie können keinen Alias mit einer
using static-Anweisung erstellen:using static con = System.Console; using static unsafe ip = int*;
Mit C# 12 wurden die folgenden Einschränkungen eingeführt:
Sie können die Modifizierer
in,refoderoutin einem using-Alias nicht verwenden:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;Eine
unsafe using-Direktive muss einen Alias oder einestatic usingangeben:// Elsewhere: public namespace UnsafeExamples { public unsafe static class UnsafeType { // ... } } // Using directives: using unsafe IntPointer = int*; using static unsafe UnsafeExamples.UnsafeType; using unsafe UnsafeExamples; // not allowedSie können keinen Alias für einen Nullable-Verweistyp erstellen:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed