Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano następujące błędy kompilatora:
- CS0138: Błąd: Dyrektywa using namespace może być stosowana tylko do przestrzeni nazw; "type" to typ, który nie jest przestrzenią nazw.
- CS0431: Błąd: Nie można użyć aliasu "identifier" z
::odkąd alias odwołuje się do typu. Zamiast tego użyj polecenia.. - CS0432: Błąd: Nie znaleziono aliasu "identyfikatora".
- CS0576: Błąd: przestrzeń nazw "przestrzeń nazw" zawiera definicję powodującą konflikt z aliasem "identifier".
- CS0687: Błąd: kwalifikator
::aliasu przestrzeni nazw zawsze jest rozpoznawany jako typ lub przestrzeń nazw, dlatego jest tutaj niedozwolony. Rozważ użycie.zamiast tego. - CS1529: Błąd: Klauzula using musi poprzedzać wszystkie inne elementy zdefiniowane w przestrzeni nazw z wyjątkiem deklaracji aliasu extern.
- CS1537: Błąd: alias using "alias" pojawił się wcześniej w tej przestrzeni nazw.
- CS7000: Błąd: Nieoczekiwane użycie nazwy aliasu.
- CS7007: Błąd:
using staticDyrektywa może być stosowana tylko do typów. Rozważ zamiast tego dyrektywęusing namespace - CS8083: Błąd: nazwa kwalifikowana aliasu nie jest wyrażeniem.
- CS8085: Błąd: nie można użyć dyrektywy "using static" do deklarowania aliasu.
- CS8914: Błąd: nie można użyć globalnej dyrektywy using w deklaracji przestrzeni nazw.
- CS8915: Błąd: globalna dyrektywa using musi poprzedzać wszystkie dyrektywy nienależące do użycia globalnego.
- CS9055: Błąd: nie można użyć typu pliku lokalnego w dyrektywie "global using static".
- CS9130: Błąd: Używanie aliasu nie może być typem
ref. - CS9131: Błąd: tylko alias używany może być
unsafe. - CS9132: Błąd: Używanie aliasu nie może być typem odwołania dopuszczanym do wartości null.
- CS9133: Błąd:
staticmodyfikator musi poprzedzaćunsafemodyfikator. - CS9162: Typ jest nieprawidłowy dla "używanie statycznego". Można użyć tylko klasy, struktury, interfejsu, wyliczenia, delegata lub przestrzeni nazw.
A następujące ostrzeżenia kompilatora:
- CS0105: Ostrzeżenie: dyrektywa using dla "przestrzeni nazw" pojawiła się wcześniej w tej przestrzeni nazw.
- CS0440: Ostrzeżenie: Definiowanie aliasu o nazwie
globaljest nieodpowiednie, ponieważglobal::zawsze odwołuje się do globalnej przestrzeni nazw, a nie aliasu. - CS8019: Informacje: Niepotrzebne używanie dyrektywy.
- CS8933: Informacje: dyrektywa using pojawiła się wcześniej jako globalna.
Te błędy i ostrzeżenia wskazują using , że dyrektywa nie jest poprawnie sformułowana. W poniższych sekcjach opisano te błędy i sposób ich poprawiania.
Korzystanie z dyrektywy
Dyrektywa using musi poprzedzać wszelkie inne elementy w namespace deklaracji lub przed wszelkimi namespace deklaracjami w pliku. using Umieszczenie dyrektywy w dalszej części pliku powoduje, że kompilator generuje błąd CS1529:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Aby rozwiązać ten problem, przenieś wszelkie using deklaracje na górę pliku lub górę przestrzeni nazw:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Kompilator generuje ostrzeżenie CS8933, CS0105 lub diagnostic CS8019 dla zduplikowanej using dyrektywy z using dyrektywy or global using . Można usunąć wszelkie duplikaty.
Niepoprawne połączenie using dyrektywy z modyfikatorami using staticglobal, lub unsafe dyrektywy opisano w dalszej części tego artykułu.
Używanie dyrektywy statycznej
Dyrektywa using static importuje jeden typ elementów członkowskich do bieżącej przestrzeni nazw. Poniższy przykład importuje metody z System.Consoleprogramu , takie jak WriteLine do bieżącej przestrzeni nazw:
using static System.Console;
Kompilator generuje CS0138 , jeśli pominięto static modyfikator:
using System.Console; // CS0138
Kompilator generuje cs7007 , jeśli zamiast typu uwzględnisz static modyfikator importujący przestrzeń nazw:
using static System; // CS7007
Kompilator emituje CS9162, jeśli symbol nie jest jednym z odpowiednich typów.
W przypadku połączenia static modyfikatora z unsafe modyfikatorem using w dyrektywie static modyfikator musi być najpierw:
using static unsafe UnsafeExamples.UnsafeType;
Globalna dyrektywa using
global using Dyrektywa importuje przestrzeń nazw lub typ we wszystkich plikach źródłowych w bieżącym projekcie:
global using System.Text;
Wszystkie global using dyrektywy muszą poprzedzać wszelkie dyrektywy inne niż globalne using w tym pliku źródłowym namespacei nie mogą być umieszczane w pliku . W ten sposób wyniki są odpowiednio w cs8915 i CS8914.
Ponadto static global using dyrektywa nie może odwoływać się do typu lokalnego pliku.
Kwalifikator aliasów
Kwalifikator aliasu , ::poprzedza alias przestrzeni nazw lub jest zgodny z aliasem global . Jeśli używasz :: metody , gdzie . należy używać do oddzielania elementów w pełni kwalifikowanej nazwy, kompilator emituje jeden z CS0431, CS0432, CS0687, *CS7000 lub CS8083.
We wszystkich przypadkach zastąp :: element separatorem . .
Ponadto jeśli zdefiniujesz alias o nazwie global, kompilator wystawia plik CS0440. Alias global zawsze odwołuje się do globalnej przestrzeni nazw. Deklarowanie aliasu nie działa i należy wybrać inną nazwę aliasu.
Konflikty nazw aliasów
Alias można zadeklarować w przestrzeni nazw lub typie z dyrektywąusing:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Spróbuj utworzyć unikatową nazwę aliasu, nazwę po lewej stronie = logowania w poprzednich przykładach. Użycie nazwy, która jest już mapowania na typ (na przykład Object) lub przestrzeń nazw (System) może spowodować CS0576 lub CS1537.
Ograniczenia dotyczące używania aliasów
Przed językiem C# 12 język nakładał te ograniczenia na using dyrektywy, które tworzą alias dla deklaracji typu:
Nie można utworzyć aliasu z dyrektywą
using static:using static con = System.Console; using static unsafe ip = int*;
Począwszy od języka C# 12, wprowadzono następujące ograniczenia:
Nie można użyć
inmodyfikatorów ,refanioutw aliasie:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;unsafe usingDyrektywa musi określać alias lub :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 allowedNie można utworzyć aliasu dla typu odwołania dopuszczanego do wartości null:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed