Bagikan melalui


Mengatasi peringatan yang terkait menggunakan namespace

Artikel ini membahas kesalahan pengkompilasi berikut:

  • CS0138: Kesalahan: Direktif menggunakan namespace hanya dapat diterapkan ke namespace; 'type' adalah tipe bukan namespace.
  • CS0431: Kesalahan: Tidak dapat menggunakan alias 'pengidentifikasi' karena :: alias mereferensikan jenis. Gunakan . sebagai gantinya.
  • CS0432: Kesalahan: Alias 'pengidentifikasi' tidak ditemukan.
  • CS0576: Kesalahan: Namespace 'namespace' berisi definisi yang bertentangan dengan alias 'pengidentifikasi'.
  • CS0687: Kesalahan: Kualifikasi :: alias namespace selalu diselesaikan ke jenis atau namespace jadi ilegal di sini. Pertimbangkan untuk menggunakan . sebagai gantinya.
  • CS1529: Kesalahan: Klausa penggunaan harus mendahului semua elemen lain yang ditentukan dalam namespace kecuali deklarasi alias ekstern.
  • CS1537: Kesalahan: Menggunakan alias 'alias' muncul sebelumnya di namespace ini.
  • CS7000: Kesalahan: Penggunaan nama alias yang tidak terduga.
  • CS7007: Kesalahan: Arahan using static hanya dapat diterapkan ke jenis. Pertimbangkan direktif using namespace sebagai gantinya
  • CS8083: Kesalahan: Nama yang memenuhi syarat alias bukan ekspresi.
  • CS8085: Kesalahan: Direktif 'menggunakan statis' tidak dapat digunakan untuk mendeklarasikan alias.
  • CS8914: Kesalahan: Global yang menggunakan direktif tidak dapat digunakan dalam deklarasi namespace.
  • CS8915: Kesalahan: Global yang menggunakan direktif harus mendahului semua non-global menggunakan arahan.
  • CS9055: Kesalahan: Jenis file-lokal tidak dapat digunakan dalam direktif 'global menggunakan statis'.
  • CS9130: Kesalahan: Menggunakan alias tidak dapat berupa ref jenis.
  • CS9131: Kesalahan: Hanya alias penggunaan yang dapat berupa unsafe.
  • CS9132: Kesalahan: Menggunakan alias tidak dapat menjadi jenis referensi nullable.
  • CS9133: Kesalahan: static pengubah harus mendahului unsafe pengubah.
  • CS9162: Jenis tidak valid untuk 'menggunakan statis'. Hanya kelas, struct, antarmuka, enum, delegasi, atau namespace yang dapat digunakan.

Dan peringatan kompilator berikut:

  • CS0105: Peringatan: Direktif penggunaan untuk 'namespace' muncul sebelumnya di namespace ini.
  • CS0440: Peringatan: Menentukan alias bernama global tidak disarankan karena global:: selalu mereferensikan namespace global dan bukan alias.
  • CS8019: Info: Tidak perlu menggunakan direktif.
  • CS8933: Info: Direktif penggunaan muncul sebelumnya sebagai penggunaan global.

Kesalahan dan peringatan ini menunjukkan bahwa Anda direktif using tidak terbentuk dengan benar. Bagian berikut mencakup kesalahan ini dan cara memperbaikinya.

Menggunakan direktif

Arahan using harus mendahului elemen lain dalam namespace deklarasi, atau sebelum deklarasi apa pun namespace dalam file. Menempatkan using direktif nanti dalam file menyebabkan pengkompilasi menghasilkan kesalahan CS1529:

namespace UsingDirective;
public class MyClass
{
}

using System.Text.Json; // CS1529

Untuk memperbaiki masalah ini, pindahkan deklarasi apa pun using ke bagian atas file atau bagian atas namespace layanan:

using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}

Kompilator menghasilkan peringatan CS8933, CS0105, atau CS8019 diagnostik untuk arahan duplikat using dari using arahan atau global using . Anda dapat menghapus duplikat apa pun.

Salah menggabungkan arahan using dengan static, , globalatau unsafe pengubah pada using direktif dibahas nanti dalam artikel ini.

Menggunakan direktif statis

Direktif using static mengimpor anggota satu jenis ke dalam namespace saat ini. Contoh berikut mengimpor metode dari System.Console, seperti WriteLine ke dalam namespace saat ini:

using static System.Console;

Pengkompilasi menghasilkan CS0138 jika Anda menghilangkan pengubah static :

using System.Console; // CS0138

Pengkompilasi menghasilkan CS7007 jika Anda menyertakan static pengubah yang mengimpor namespace alih-alih jenis:

using static System; // CS7007

Pengkompilasi memancarkan CS9162 jika simbol bukan salah satu jenis yang tepat.

Jika Anda menggabungkan pengubah static dengan unsafe pengubah dalam direktif using , pengubah static harus terlebih dahulu:

using static unsafe UnsafeExamples.UnsafeType;

Direktif penggunaan global

Direktif global using mengimpor namespace layanan atau mengetikkan semua file sumber dalam proyek saat ini:

global using System.Text;

Setiap global using arahan harus mendahului arahan non-global using dalam file sumber tersebut, dan tidak boleh ditempatkan dalam namespace. Melakukannya menghasilkan CS8915 dan CS8914, masing-masing.

Selain itu, arahan static global using tidak dapat mereferensikan jenis file-lokal .

Kualifikasi alias

Kualifikasi alias, ::, mendahului alias namespace, atau mengikuti global alias. Jika Anda menggunakan :: di mana . harus digunakan untuk memisahkan elemen dari nama yang sepenuhnya memenuhi syarat, pengkompilasi memancarkan salah satu CS0431, CS0432, CS0687, *CS7000, atau CS8083.

Dalam semua kasus, ganti :: dengan pemisah . .

Selain itu, jika Anda menentukan alias bernama global, pengkompilasi mengeluarkan CS0440. global Alias selalu mengacu pada namespace global. Mendeklarasikan alias untuk itu tidak berfungsi, dan Anda harus memilih nama yang berbeda untuk alias Anda.

Konflik nama alias

Anda dapat mendeklarasikan alias ke namespace layanan atau jenis dengan direktif using :

using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);

Anda harus mencoba membuat nama unik untuk alias, nama di sebelah kiri = masuk dalam contoh sebelumnya. Menggunakan nama yang sudah memetakan ke Jenis (misalnya Object) atau namespace (System) dapat menyebabkan CS0576 atau CS1537.

Pembatasan penggunaan alias

Sebelum C# 12, bahasa memberlakukan pembatasan ini pada using arahan yang membuat alias untuk deklarasi jenis:

  • Anda tidak dapat membuat alias dengan direktif using static :

    using static con = System.Console;
    using static unsafe ip = int*;
    

Dimulai dengan C# 12, pembatasan ini diperkenalkan:

  • Anda tidak dapat menggunakan inpengubah , , refatau out dalam menggunakan alias:

    // All these are invalid
    using RefInt = ref int;
    using OutInt = out int;
    using InInt = in int;
    
  • Direktif unsafe using harus menentukan alias, atau 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
    
  • Anda tidak dapat membuat alias ke jenis referensi nullable:

    using NullableInt = System.Int32?; // Allowed
    using NullableString = System.String?; // Not allowed