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 direktifusing 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 mendahuluiunsafe
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 karenaglobal::
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
, , global
atau 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
in
pengubah , ,ref
atauout
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, ataustatic 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