Bagikan melalui


Parameter dan argumen tidak cocok

Pengkompilasi menghasilkan kesalahan berikut ketika tidak ada argumen yang disediakan untuk parameter formal, atau argumen tidak valid untuk parameter tersebut:

  • CS0182: Argumen atribut harus berupa ekspresi konstanta, ekspresi, typeof atau ekspresi pembuatan array dari jenis parameter atribut
  • CS0591: Nilai tidak valid untuk argumen ke atribut
  • CS0599: Nilai tidak valid untuk argumen atribut bernama 'argumen'
  • CS0617: Bukan argumen atribut bernama yang valid. Argumen atribut bernama harus berupa bidang yang tidak baca-saja, statis, atau const, atau properti baca-tulis yang bersifat publik dan bukan statis.
  • CS0633: Argumen ke atribut harus merupakan pengidentifikasi yang valid
  • CS0643: Argumen atribut bernama duplikat
  • CS0655: Bukan argumen atribut bernama yang valid karena bukan jenis parameter atribut yang valid
  • CS0839: Argumen hilang.
  • CS1016: Argumen atribut bernama diharapkan
  • CS1739: Kelebihan beban terbaik untuk tidak memiliki parameter bernama
  • CS1740: Argumen bernama tidak dapat ditentukan beberapa kali
  • CS1742: Akses array mungkin tidak memiliki penentu argumen bernama
  • CS1744: Argumen bernama menentukan parameter yang argumen posisinya telah diberikan
  • CS1746: Delegasi tidak memiliki parameter bernama 'name'
  • CS7036: Tidak ada argumen yang diberikan yang sesuai dengan parameter yang diperlukan
  • CS7067: Parameter konstruktor atribut bersifat opsional, tetapi tidak ada nilai parameter default yang ditentukan.
  • CS8324: Spesifikasi argumen bernama harus muncul setelah semua argumen tetap ditentukan dalam pemanggilan dinamis.
  • CS8905: Penunjuk fungsi tidak dapat dipanggil dengan argumen bernama.
  • CS8943: null bukan nama parameter yang valid. Untuk mendapatkan akses ke penerima metode instans, gunakan string kosong sebagai nama parameter.
  • CS8944: Metode bukan metode instans, penerima tidak dapat menjadi argumen handler string terinterpolasi.
  • CS8945: Bukan nama parameter yang valid.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumen tidak dapat merujuk ke parameter tempat atribut digunakan.
  • CS8949: Yang InterpolatedStringHandlerArgumentAttribute diterapkan ke parameter salah bentuk dan tidak dapat ditafsirkan. Buat instansnya secara manual.
  • CS8950: Parameter adalah argumen untuk konversi handler string terinterpolasi pada parameter, tetapi argumen yang sesuai ditentukan setelah ekspresi string terinterpolasi. Menyusun ulang argumen.
  • CS8951: Parameter tidak disediakan secara eksplisit, tetapi digunakan sebagai argumen untuk konversi handler string terinterpolasi pada parameter.
  • CS8964: CallerArgumentExpressionAttribute hanya dapat diterapkan ke parameter dengan nilai default
  • CS8965: Diterapkan CallerArgumentExpressionAttribute ke parameter tidak akan berpengaruh karena referensi mandiri.
  • CS8966: Tidak CallerArgumentExpressionAttribute akan berpengaruh karena berlaku untuk anggota yang digunakan dalam konteks yang tidak mengizinkan argumen opsional

Argumen hilang

Kesalahan umum berikut dikeluarkan ketika pengkompilasi tidak dapat mencocokkan argumen dengan semua parameter anggota:

  • CS0839: Argumen hilang.
  • CS7036: Tidak ada argumen yang diberikan yang sesuai dengan parameter yang diperlukan

Kesalahan ini bersifat umum: Pengkompilasi tidak dapat mencocokkan argumen yang diberikan dalam panggilan metode ke parameter metode yang diperlukan. Periksa penyebab berikut:

  • Pastikan Anda menyertakan semua argumen yang diperlukan.
  • Pastikan argumen dalam urutan yang benar.
  • Pastikan semua argumen adalah jenis yang benar.
  • Pastikan aturan resolusi kelebihan beban memilih metode yang Anda harapkan.

Anda mungkin juga melihat CS7036 jika Anda menulis fungsi lokal yang kelebihan beban. Fungsi lokal tidak dapat kelebihan beban. Pengkompilasi hanya mengenali fungsi lokal pertama dengan nama tersebut. Periksa apakah Anda ingin memanggil fungsi lokal yang berbeda.

Kesalahan ini sering muncul dengan diagnostik lain yang dapat membantu mendiagnosis penyebab yang benar.

Argumen untuk atribut

Pengkompilasi mengeluarkan kesalahan ini ketika argumen ke konstruktor atribut salah:

  • CS0182: Argumen atribut harus berupa ekspresi konstanta, ekspresi, typeof atau ekspresi pembuatan array dari jenis parameter atribut
  • CS0591: Nilai tidak valid untuk argumen ke atribut
  • CS0599: Nilai tidak valid untuk argumen atribut bernama 'argumen'
  • CS0617: Bukan argumen atribut bernama yang valid. Argumen atribut bernama harus berupa bidang yang tidak baca-saja, statis, atau const, atau properti baca-tulis yang bersifat publik dan bukan statis.
  • CS0633: Argumen ke atribut harus merupakan pengidentifikasi yang valid
  • CS0643: Argumen atribut bernama duplikat
  • CS0655: bukan argumen atribut bernama yang valid karena bukan jenis parameter atribut yang valid

Jika Anda menggunakan System.AttributeUsageAttribute pada definisi atribut Anda, pastikan nilai yang diizinkan tidak saling eksklusif. Periksa apakah jenis dan urutan argumen ke atribut sudah benar. Pastikan teks argumen string valid. Untuk banyak atribut, argumen harus merupakan pengidentifikasi C# yang valid. Argumen untuk konstruktor atribut harus berupa konstanta waktu kompilasi. Oleh karena itu, mereka terbatas pada jenis yang mendukung konstanta harfiah. Selain itu, jenis berikut yang memungkinkan konstanta harfiah dilarang sebagai parameter atribut:

Anda tidak dapat menentukan argumen bernama berulang dengan nama parameter yang sama. Anda hanya dapat mengatur properti yang dapat diakses saat menginisialisasi atribut. Anda tidak dapat mengatur properti privat.

Parameter dan argumen bernama dan opsional

Pengkompilasi mengeluarkan kesalahan berikut untuk penggunaan argumen bernama dan opsional yang salah:

  • CS1016: Argumen atribut bernama diharapkan
  • CS1739: Kelebihan beban terbaik untuk tidak memiliki parameter bernama
  • CS1740: Argumen bernama tidak dapat ditentukan beberapa kali
  • CS1742: Akses array mungkin tidak memiliki penentu argumen bernama
  • CS1744: Argumen bernama menentukan parameter yang argumen posisinya telah diberikan
  • CS1746: Delegasi tidak memiliki parameter bernama 'name'
  • CS7067: Parameter konstruktor atribut bersifat opsional, tetapi tidak ada nilai parameter default yang ditentukan.
  • CS8324: Spesifikasi argumen bernama harus muncul setelah semua argumen tetap ditentukan dalam pemanggilan dinamis.
  • CS8905: Penunjuk fungsi tidak dapat dipanggil dengan argumen bernama.

Periksa penyebab kesalahan berikut:

  • Nama parameter argumen bernama salah.
  • Kelebihan beban yang dipilih tidak memiliki parameter yang cocok dengan argumen bernama.
  • Nama parameter diulang pada lebih dari satu argumen.
  • Argumen posisi (tidak bernama) muncul setelah argumen bernama.
  • Argumen bernama tidak diizinkan untuk parameter indeks array.

Penangan string terinterpolasi

Pengkompilasi mengeluarkan kesalahan berikut saat Anda salah menentukan handler string terinterpolasi.

  • CS8943: null bukan nama parameter yang valid. Untuk mendapatkan akses ke penerima metode instans, gunakan string kosong sebagai nama parameter.
  • CS8944: Bukan metode instans, penerima tidak dapat menjadi argumen handler string terinterpolasi.
  • CS8945: Bukan nama parameter yang valid.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumen tidak dapat merujuk ke parameter tempat atribut digunakan.
  • CS8949: Yang InterpolatedStringHandlerArgumentAttribute diterapkan ke parameter salah bentuk dan tidak dapat ditafsirkan. Buat instans secara manual.
  • CS8950: Parameter adalah argumen untuk konversi handler string terinterpolasi pada parameter, tetapi argumen yang sesuai ditentukan setelah ekspresi string terinterpolasi.
  • CS8951: Parameter tidak disediakan secara eksplisit, tetapi digunakan sebagai argumen untuk konversi handler string terinterpolasi pada parameter.

Handler string terinterpolasi adalah konstruksi berbasis pola. Penting untuk memperbaiki pola. Lihat spesifikasi fitur, atau ikuti tutorial tentang membangun handler string terinterpolasi.

Informasi penelusuran kesalahan penelepon

Pengkompilasi mengeluarkan kesalahan berikut pada penggunaan yang salah dari System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:

  • CS8964: CallerArgumentExpressionAttribute hanya dapat diterapkan ke parameter dengan nilai default

Selain itu, kompilator mengeluarkan peringatan berikut pada penggunaan yang salah dari CallerArgumentExpressionAttribute:

  • CS8965: Diterapkan CallerArgumentExpressionAttribute ke parameter tidak akan berpengaruh karena referensi mandiri.
  • CS8966: Tidak CallerArgumentExpressionAttribute akan berpengaruh karena berlaku untuk anggota yang digunakan dalam konteks yang tidak mengizinkan argumen opsional

Parameter apa pun yang dianotasi dengan CallerArgumentExpression atribut harus memiliki nilai default.