Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini membahas kesalahan dan peringatan pengkompilasi berikut:
- CS8108: Tidak dapat meneruskan argumen dengan tipe dinamis ke parameter params 'parameter' dari fungsi lokal 'method'.
- CS8112: Fungsi lokal 'metode' harus mendeklarasikan isi karena tidak ditandai 'ekstern statis'.
- CS8321: Fungsi lokal 'metode' dinyatakan tetapi tidak pernah digunakan
- CS8421: Fungsi lokal statis tidak dapat berisi referensi ke 'variabel'.
- CS8422: Fungsi lokal statis tidak dapat berisi referensi ke 'ini' atau 'dasar'.
Fungsi lokal ditambahkan dalam C# 7.0. Mereka memungkinkan Anda mendeklarasikan metode pembantu di dalam anggota lainnya. Diagnostik dalam artikel ini mencakup deklarasi fungsi lokal, panggilan, penggunaan, dan pembatasan pengambilan ekstra untuk static fungsi lokal.
Badan fungsi lokal
- CS8112: Fungsi lokal 'metode' harus mendeklarasikan isi karena tidak ditandai 'ekstern statis'.
Deklarasi fungsi lokal harus menyertakan isi kecuali fungsi lokal dinyatakan static extern. Tambahkan isi blok atau isi ekspresi ke fungsi lokal. Jika implementasi disediakan secara eksternal, tandai fungsi static extern lokal dan pastikan deklarasi mengikuti aturan untuk metode eksternal.
Parameter param dan argumen dinamis
- CS8108: Tidak dapat meneruskan argumen dengan tipe dinamis ke parameter `params` 'parameter' dari fungsi lokal 'method'.
Panggilan fungsi lokal tidak dapat meneruskan dynamic argumen ke params parameter. Konversi nilai ke jenis elemen atau jenis array yang diharapkan oleh parameter params sebelum pemanggilan. Anda juga dapat menyimpan nilai dalam array yang ditik secara eksplisit dan meneruskan array tersebut ke fungsi lokal.
Fungsi lokal yang tidak digunakan
- CS8321: Fungsi lokal 'metode' dinyatakan tetapi tidak pernah digunakan
Kompilator melaporkan peringatan ini ketika Anda mendeklarasikan fungsi lokal tetapi tidak ada kode yang dapat dijangkau yang memanggilnya. Hapus fungsi lokal yang tidak digunakan, atau panggil fungsi tersebut dari anggota yang memuatnya. Jika Anda bermaksud menggunakan fungsi lokal itu pada perubahan mendatang, jangan masukkan ke dalam kode sumber sampai benar-benar diperlukan.
Fungsi lokal statis tidak dapat mengambil status
- CS8421: Fungsi lokal statis tidak dapat berisi referensi ke 'variabel'.
- CS8422: Fungsi lokal statis tidak dapat berisi referensi ke 'ini' atau 'dasar'.
Fungsistatic lokal tidak dapat mengambil status dari cakupan penutup. Ini tidak dapat mereferensikan variabel lokal yang dicakup, parameter, anggota instans melalui this, atau this itu sendiri. Teruskan setiap nilai yang dibutuhkan fungsi lokal sebagai parameter (CS8421, CS8422). Jika fungsi lokal harus mengambil variabel atau status instans dari cakupan penutup, hapus pengubah static .
Contoh berikut menunjukkan referensi yang menyebabkan CS8422:
public class C
{
private int counter = 1;
public void IncreaseCounter()
{
static void LocalFunc(int addition)
{
this.counter += addition; // CS8422
base.ToString(); // CS8422
counter += addition; // CS8422: implicit this
ToString(); // CS8422: implicit base
}
LocalFunc(10);
}
}
Untuk memperbaiki CS8422, teruskan data instans yang diperlukan ke fungsi lokal, pindahkan pembantu di luar konteks instans, atau hapus static saat fungsi lokal harus mengakses status instans.
Diagnostik terkait
- Untuk informasi selengkapnya tentang fungsi lokal di pohon ekspresi, lihat Beberapa ekspresi dilarang dalam pohon ekspresi dalam pesan pengkompilasi C#.
- Untuk informasi selengkapnya tentang fungsi lokal dengan parameter jenis generik, lihat Mengatasi kesalahan dan peringatan yang terkait dengan parameter jenis generik dan mengetik argumen dalam pesan pengkompilasi C#.
- Untuk informasi selengkapnya tentang atribut pada fungsi lokal, lihat Mengatasi kesalahan dan peringatan yang melibatkan deklarasi atribut dan penggunaan atribut dalam kode Anda dalam pesan pengkompilasi C#.
- Untuk informasi selengkapnya tentang variabel yang diambil dalam fungsi anonim, lihat Kesalahan ekspresi Lambda dan peringatan dalam pesan pengompilasi C#.
- Untuk informasi selengkapnya tentang pengambilan dalam konstruktor dan konstruktor utama, lihat Mengatasi kesalahan yang terkait dengan deklarasi konstruktor dan penginisialisasi modul dalam pesan pengkompilasi C#.