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 bir using 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ştiriciden unsafe ö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ığından global:: , 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 namespacenamespace 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 staticglobalyanlış 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.ConsoleWriteLine 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 namespaceyerleş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ı globalbir 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 , refveya out 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 belirtmelidir 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
    
  • 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