Ad alanlarını kullanmayla ilgili uyarıları çözme
Bu makale aşağıdaki derleyici hatalarını kapsar:
- CS0138: Hata: Ad alanı kullanan yönergesi yalnızca ad alanlarına uygulanabilir; 'type', ad alanı olmayan bir türdür.
- CS0431: Hata: Diğer ad bir türe başvurdığından ile
::
diğer adı 'tanımlayıcı' kullanılamaz. Bunun yerine kullanın.
. - CS0432: Hata: Diğer ad 'tanımlayıcı' bulunamadı.
- CS0576: Hata: 'ad alanı' ad alanı, 'identifier' diğer adıyla çakışan bir tanım içeriyor.
- CS0687: Hata: Ad alanı diğer ad niteleyicisi
::
her zaman bir türe veya ad alanına çözümlendiğinden burada geçersizdir. Bunun yerine kullanmayı.
göz önünde bulundurun. - CS1529: Hata: Using yan tümcesi, extern diğer ad bildirimleri dışında ad alanında tanımlanan diğer tüm öğelerden önce olmalıdır.
- CS1537: Hata: 'diğer ad' kullanma diğer adı daha önce bu ad alanında görünüyordu.
- CS7000: Hata: Diğer ad beklenmeyen şekilde kullanıldı.
- CS7007: Hata: Yönerge
using static
yalnızca türlere uygulanabilir. Bunun yerine birusing namespace
yönerge düşünün - CS8083: Hata: Diğer ad nitelenmiş ad bir ifade değil.
- CS8085: Hata: Diğer ad bildirmek için 'using static' yönergesi kullanılamaz.
- CS8914: Hata: Genel kullanım yönergesi ad alanı bildiriminde kullanılamaz.
- CS8915: Hata: Genel kullanım yönergesi, genel olmayan tüm using yönergelerinin önünde olmalıdır.
- CS9055: Hata: Dosya yerel türü 'statik kullanarak genel' yönergesinde kullanılamaz.
- CS9130: Hata: Diğer ad kullanmak bir
ref
tür olamaz. - CS9131: Hata: Yalnızca kullanan diğer ad olabilir
unsafe
. - CS9132: Hata: Diğer ad kullanmak null atanabilir bir başvuru türü olamaz.
- CS9133: Hata:
static
değiştirici değiştiricidenunsafe
önce olmalıdır. - CS9162: Tür 'statik kullanma' için geçerli değil. Yalnızca bir sınıf, yapı, arabirim, sabit listesi, temsilci veya ad alanı kullanılabilir.
Ve aşağıdaki derleyici uyarıları:
- CS0105: Uyarı: 'ad alanı' için kullanım yönergesi daha önce bu ad alanında görünüyordu.
- CS0440: Uyarı: Adlı
global
bir diğer ad tanımlamak, her zaman bir diğer ad alanına değil genel ad alanına başvurdığındanglobal::
, kötü bir şekilde bildirilir. - CS8019: Bilgi: Yönergesi kullanılarak gereksizdir.
- CS8933: Bilgi: Kullanım yönergesi daha önce genel kullanım olarak gösterildi.
Bu hatalar ve uyarılar yönergenin using
doğru oluşturulmadığınızı gösterir. Aşağıdaki bölümlerde bu hatalar ve bunların nasıl düzeltilmesi gerektiği ele alınıyor.
Yönerge kullanma
yönergesi using
, bir bildirimdeki diğer öğelerden veya dosyadaki herhangi bir namespace
namespace
bildirimden önce olmalıdır. Daha sonra dosyaya bir using
yönerge koymak, derleyicinin CS1529 hatasını üretmesine neden olur:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Bu sorunu düzeltmek için, bildirimleri using
dosyanın en üstüne veya ad alanının en üstüne taşıyın:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Derleyici, veya yönergesinden using
yinelenen using
yönerge için CS8933, CS0105 veya tanılama CS8019 uyarısını üretir.global using
Yinelenenleri kaldırabilirsiniz.
Bir using
yönergenin , veya unsafe
değiştiricileriyle static
global
yanlış bir şekilde birleştirilmesiusing
, bu makalenin devamında ele alınmıştır.
Statik yönerge kullanma
yönergesi using static
, bir türün üyelerini geçerli ad alanına aktarır. Aşağıdaki örnek, gibi yöntemlerinden System.Console
WriteLine
geçerli ad alanına aktarır:
using static System.Console;
Değiştiriciyi atlarsanız static
derleyici CS0138 oluşturur:
using System.Console; // CS0138
Bir tür yerine ad alanını içeri aktaran değiştiriciyi static
eklerseniz derleyici CS7007 oluşturur:
using static System; // CS7007
Simge uygun türlerden biri değilse, derleyici CS9162'yi yayar.
Değiştiriciyi static
bir yönergedeki değiştiriciyle unsafe
birleştirirseniz using
, static
önce değiştirici gelmelidir:
using static unsafe UnsafeExamples.UnsafeType;
Genel kullanım yönergesi
Yönerge global using
, geçerli projedeki tüm kaynak dosyalarında ad alanını veya türü içeri aktarır:
global using System.Text;
Herhangi bir global using
yönerge, bu kaynak dosyadaki genel olmayan using
yönergelerin önüne girmelidir ve içine namespace
yerleştirilmemelidir. Bunun yapılması sırasıyla CS8915 ve CS8914'e neden olur.
Ayrıca, bir static global using
yönerge bir dosya yerel türüne başvuramaz.
Diğer ad niteleyicisi
Diğer ad niteleyicisi, ::
ad alanı diğer adının önüne geçer veya diğer adı izler global
. Tam adın öğelerini ayırmak için nerede .
kullanılması gerektiğini kullanırsanız::
, derleyici CS0431, CS0432, CS0687, *CS7000 veya CS8083'lerden birini yayar.
Her durumda, öğesini ayırıcı ile .
değiştirin::
.
Buna ek olarak, adlı global
bir diğer ad tanımlarsanız, derleyici CS0440 sorununu giderir. Diğer global
ad her zaman genel ad alanına başvurur. Diğer ad bildirme işe yaramaz ve diğer adınız için farklı bir ad seçmelisiniz.
Diğer ad çakışmaları
Bir ad alanına veya yönergesine sahip using
bir türe diğer ad bildirebilirsiniz:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Diğer ad için, önceki örneklerde oturum açmanın solundaki =
ad olan benzersiz bir ad oluşturmayı denemelisiniz. Zaten bir Türe (örneğinObject
) veya ad alanına (System
) eşleyen bir ad kullanmak CS0576 veya CS1537'ye neden olabilir.
Diğer adları kullanma kısıtlamaları
C# 12'nin öncesinde, dil bir tür bildirimi için diğer ad oluşturan yönergelere using
şu kısıtlamaları uygulardı:
Bir yönergeyle
using static
diğer ad oluşturamazsınız:using static con = System.Console; using static unsafe ip = int*;
C# 12'ye başlayarak, bu kısıtlamalar kullanıma sunulmuştur:
Bir diğer ad kullanarak ,
ref
veyaout
değiştiricilerini kullanamazsınızin
:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Yönerge
unsafe using
bir diğer ad veya belirtmelidirstatic 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
Null atanabilir başvuru türü için diğer ad oluşturamazsınız:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed