Kesalahan dan peringatan yang terkait dengan pengubah params
pada parameter metode
Ada beberapa kesalahan yang terkait dengan lock
pernyataan dan sinkronisasi utas:
- CS0225: Parameter param harus berupa array dimensi tunggal atau memiliki jenis koleksi yang valid
- CS0231: Parameter param harus menjadi parameter terakhir dalam daftar parameter formal.
- CS0466: 'method1' seharusnya tidak memiliki parameter param karena 'method2' tidak
- CS0674: Jangan gunakan
System.ParamArrayAttribute
atauSystem.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
. Gunakan kata kunci sebagai gantinyaparams
. - CS0758: Kedua deklarasi metode parsial harus menggunakan
params
parameter atau tidak boleh menggunakanparams
parameter - CS1104: Array parameter tidak dapat digunakan dengan
this
pengubah pada metode ekstensi. - CS1611: Parameter param tidak dapat dideklarasikan sebagai dalam
ref
atauout
- CS1670:
params
tidak valid dalam konteks ini - CS1751: Tidak dapat menentukan nilai default untuk array parameter.
- CS9218: Argumen jenis untuk metode tidak dapat disimpulkan dari penggunaan karena argumen dengan jenis dinamis digunakan dan metode memiliki parameter pengumpulan param non-array. Coba tentukan argumen jenis secara eksplisit.
- CS9219: Ambiguitas antara bentuk yang diperluas dan normal dari parameter pengumpulan param non-array, satu-satunya argumen yang sesuai memiliki jenis
dynamic
. Pertimbangkan untuk melemparkan argumen dinamis. - CS9223: Pembuatan koleksi param menghasilkan rantai pemanggilan konstruktor yang tak terbatas.
- CS9224: Metode tidak boleh kurang terlihat daripada anggota dengan koleksi param.
- CS9225: Konstruktor membuat anggota yang diperlukan tidak diinisialisasi.
- CS9227: Jenis tidak berisi definisi untuk metode instans
Add
yang sesuai. - CS9228: Jenis koleksi param non-array harus memiliki konstruktor yang berlaku yang dapat dipanggil tanpa argumen.
Selain itu, pengkompilasi mungkin menghasilkan peringatan berikut yang terkait dengan params
pengubah pada parameter metode:
- CS9220: Satu atau beberapa kelebihan metode yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
- CS9221: Satu atau beberapa overload pengindeks yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
- CS9222: Satu atau beberapa kelebihan konstruktor yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
Aturan deklarasi metode
Kesalahan berikut menunjukkan penggunaan params
pengubah pada parameter saat pengubah tidak diizinkan dalam konteks tersebut params
:
- CS0231: Parameter param harus menjadi parameter terakhir dalam daftar parameter formal.
- CS1104: Array parameter tidak dapat digunakan dengan
this
pengubah pada metode ekstensi. - CS1611: Parameter param tidak dapat dideklarasikan sebagai dalam
ref
atauout
- CS1670:
params
tidak valid dalam konteks ini - CS1751: Tidak dapat menentukan nilai default untuk array parameter.
Kompilator memberlakukan aturan berikut tentang penggunaan params
pengubah pada parameter metode:
- Pengubah
params
hanya diperbolehkan pada parameter terakhir dalam daftar parameter formal. Ini termasuk parameter apa pun dengan nilai default. - Anda tidak dapat menyertakan argumen default untuk parameter saat pengubah
params
digunakan. - Pengubah
params
tidak dapat diterapkan ke parameter referensi. Parameter referensi adalah satu denganin
, ,ref readonly
ref
atauout
pengubah. - Pengubah
params
tidak dapat dikombinasikan dengan pengubahthis
pada metode ekstensi. - Pengubah
params
tidak dapat digunakan pada operator yang kelebihan beban.
Dalam versi sebelum C# 12, pengubah params
tidak dapat digunakan pada parameter metode anonim atau ekspresi lambda.
Aturan jenis parameter dan argumen
Kesalahan berikut menunjukkan bahwa jenis parameter yang digunakan dengan params
tidak valid:
- CS9218: Argumen jenis untuk metode tidak dapat disimpulkan dari penggunaan karena argumen dengan jenis dinamis digunakan dan metode memiliki parameter pengumpulan param non-array. Coba tentukan argumen jenis secara eksplisit.
- CS9219: Ambiguitas antara bentuk yang diperluas dan normal dari parameter pengumpulan param non-array, satu-satunya argumen yang sesuai memiliki jenis 'dinamis'. Pertimbangkan untuk melemparkan argumen dinamis.
- CS0225: Parameter param harus berupa array dimensi tunggal atau memiliki jenis koleksi yang valid
- CS9227: Jenis tidak berisi definisi untuk metode instans
Add
yang sesuai. - CS9228: Jenis koleksi param non-array harus memiliki konstruktor yang berlaku yang dapat dipanggil tanpa argumen.
Peringatan berikut menunjukkan bahwa salah satu kemungkinan kelebihan beban mungkin melibatkan pengiriman dinamis. Sifat dinamis argumen tidak berpartisipasi dalam resolusi kelebihan beban.
- CS9220: Satu atau beberapa kelebihan metode yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
- CS9221: Satu atau beberapa overload pengindeks yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
- CS9222: Satu atau beberapa kelebihan konstruktor yang memiliki parameter pengumpulan param non-array mungkin hanya berlaku dalam bentuk yang diperluas yang tidak didukung selama pengiriman dinamis.
Dalam versi sebelum C# 13, pengubah params
hanya diizinkan pada array dimensi tunggal. Tidak ada jenis lain yang valid.
Dimulai dengan C# 13 jenis koleksi yang valid dapat digunakan. Namun, beberapa batasan tetap ada. Jenis koleksi harus mengikuti aturan yang sama dengan target ekspresi koleksi.
Kesalahan param lainnya
Kesalahan berikut menunjukkan masalah lain dengan menggunakan pengubah params
:
- CS0466: 'method1' seharusnya tidak memiliki parameter param karena 'method2' tidak
- CS0674: Jangan gunakan
System.ParamArrayAttribute
atauSystem.Runtime.CompilerServices.ParamCollectionAttribute
. Gunakan kata kunci sebagai gantinyaparams
. - CS0758: Kedua deklarasi metode parsial harus menggunakan
params
parameter atau tidak boleh menggunakanparams
parameter - CS9223: Pembuatan koleksi param menghasilkan rantai pemanggilan konstruktor yang tak terbatas.
- CS9224: Metode tidak boleh kurang terlihat daripada anggota dengan koleksi param.
- CS9225: Konstruktor membuat anggota yang diperlukan tidak diinisialisasi.
Metode yang mengimplementasikan antarmuka harus menyertakan pengubah params
jika dan hanya jika anggota antarmuka memiliki pengubah params
. Demikian pula, kedua deklarasi partial
metode harus menyertakan pengubah params
, atau tidak ada yang dapat menyertakan pengubah params
.
Anda harus menggunakan pengubah params
. Anda tidak dapat menerapkan atribut yang setara, baik System.ParamArrayAttribute atau System.Runtime.CompilerServices.ParamCollectionAttribute.
Pengkompilasi menghasilkan salah satu dari tiga kesalahan terakhir dalam daftar sebelumnya ketika kode yang dihasilkan untuk membuat jenis koleksi tidak valid:
- Pengkompilasi memancarkan CS9223 ketika kode yang dipancarkan untuk membuat koleksi juga berisi koleksi param dengan jenis yang sama. Biasanya, metode ini
Add
mengambilparams
koleksi dengan jenis yang sama. - Pengkompilasi memancarkan CS9224 ketika
Create
metode untuk jenis koleksi kurang dapat diakses daripada metode yang mengambilparams
parameter jenis koleksi. - Pengkompilasi memancarkan CS9225 ketika jenis koleksi memiliki anggota yang diperlukan dan konstruktor tanpa parameter tidak menginisialisasi anggota tersebut System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute dan memiliki pada konstruktor tanpa parameter.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk