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.
Pengkompilasi C# menghasilkan kesalahan dan peringatan saat Anda mendeklarasikan ekspresi interpolasi string atau penangan interpolasi string dengan sintaks yang salah atau menggunakannya dalam konteks yang tidak didukung. Diagnostik ini membantu Anda mengidentifikasi masalah dengan interpolasi string atau penanganan interpolasi string kustom.
- CS8361: Ekspresi bersyarkat tidak dapat digunakan langsung dalam interpolasi string karena ':' mengakhiri interpolasi. Kurung ekspresi bersyarkat.
- CS8941: Metode handler string terinterpolasi salah bentuk. Ini tidak mengembalikan 'void' atau 'bool'.
- CS8942: Metode handler string terinterpolasi memiliki jenis pengembalian yang tidak konsisten. Diharapkan mengembalikan jenis yang berbeda.
- CS8946: Jenis bukan pengendali string yang terinterpolasi.
- CS8947: Parameter terjadi setelah parameter handler string terinterpolasi dalam daftar parameter, tetapi digunakan sebagai argumen untuk konversi handler string terinterpolasi. Ini akan mengharuskan pemanggil untuk menyusun ulang parameter dengan argumen bernama di situs panggilan. Pertimbangkan untuk menempatkan parameter handler string terinterpolasi setelah semua argumen terlibat.
- CS8953: Konstruksi handler string terinterpolasi tidak dapat menggunakan dinamis. Buat instans secara manual sebagai gantinya.
- CS8976: Konversi handler string terinterpolasi yang mereferensikan instans yang diindeks tidak dapat digunakan dalam penginisialisasi anggota pengindeks.
- CS9205: String terinterpolasi yang diharapkan.
- CS9325: Argumen handler string terinterpolasi tidak diizinkan dalam konteks ini.
Sintaks ekspresi interpolasi
- CS8361 - Ekspresi bersyarah tidak dapat digunakan langsung dalam interpolasi string karena ':' mengakhiri interpolasi. Kurung ekspresi bersyarkat.
- CS9205 - String terinterpolasi yang diharapkan.
Untuk memperbaiki kesalahan ini, terapkan teknik berikut:
- Bungkus ekspresi bersyarat (operator terner
?:) dalam tanda kurung saat Anda menggunakannya di dalam lubang interpolasi (CS8361). Karakter titik dua memiliki arti khusus dalam string terinterpolasi saat memperkenalkan string format, sehingga pengompilasi menafsirkan:incondition ? true : falsesebagai penentu format daripada bagian dari ekspresi kondisional. Misalnya, gunakan$"{(x > 0 ? "positive" : "negative")}", bukan$"{x > 0 ? "positive" : "negative"}". - Pastikan Anda menyediakan string terinterpolasi literal di mana yang diharapkan (CS9205). Kesalahan ini terjadi ketika pengkompilasi mengharapkan string terinterpolasi (dimulai dengan
$"atau$@") tetapi mengalami jenis ekspresi yang berbeda.
Implementasi tipe pengelola string terinterpolasi
- CS8941 - Metode handler string terinterpolasi salah bentuk. Ini tidak mengembalikan 'void' atau 'bool'.
- CS8942 - Metode handler string terinterpolasi memiliki jenis pengembalian yang tidak konsisten. Diharapkan mengembalikan jenis yang berbeda.
- CS8946 - Jenis ini bukan tipe pengendali string terinterpolasi.
Saat Anda menerapkan handler string terinterpolasi kustom, terapkan teknik berikut:
- Pastikan semua metode
AppendLiteraldanAppendFormattedmengembalikan salah satu darivoidataubool(CS8941). Pola handler mengharuskan metode ini memiliki salah satu jenis pengembalian ini sehingga pengkompilasi dapat menghasilkan kode interpolasi dengan benar. Metode yang mengembalikanboolmengaktifkan sirkuit pendek ketika handler menentukan bahwa pemrosesan lebih lanjut tidak diperlukan. - Pastikan semua metode penambahan dalam jenis handler Anda menggunakan jenis pengembalian yang sama (CS8942). Jika satu metode mengembalikan
void, semua metode tambahan harus mengembalikanvoid. Jika satu mengembalikanbool, semua harus mengembalikanbool. Mencampur jenis pengembalian mencegah pengkompilasi menghasilkan kode interpolasi yang konsisten. - Terapkan InterpolatedStringHandlerAttribute pada tipe pengendali Anda dan pastikan konstruktor tersebut valid (CS8946). Jenis handler string terinterpolasi harus ditandai dengan atribut ini dan mengikuti pola handler yang akan dikenali oleh pengkompilasi.
Pembatasan penggunaan pengelola string terinterpolasi
- CS8947 - Parameter terjadi setelah parameter handler string terinterpolasi dalam daftar parameter, tetapi digunakan sebagai argumen untuk konversi handler string terinterpolasi. Ini akan mengharuskan pemanggil untuk menyusun ulang parameter dengan argumen bernama di situs panggilan. Pertimbangkan untuk menempatkan parameter handler string terinterpolasi setelah semua argumen terlibat.
- CS8953 - Konstruksi handler string terinterpolasi tidak dapat menggunakan dinamis. Buat instans '{0}'secara manual.
- CS8976 - Konversi handler string terinterpolasi yang mereferensikan instans yang diindeks tidak dapat digunakan dalam penginisialisasi anggota pengindeks.
- CS9325 - Argumen handler string terinterpolasi tidak diizinkan dalam konteks ini.
Saat Anda menggunakan handler string terinterpolasi, terapkan teknik berikut:
- Urutkan ulang parameter metode sehingga parameter apa pun yang digunakan oleh InterpolatedStringHandlerArgumentAttribute muncul sebelum parameter handler string terinterpolasi (CS8947). Peringatan ini menunjukkan bahwa pemanggil perlu menggunakan argumen bernama untuk memanggil metode dengan benar, sehingga mengurangi tingkat kebergunaan. Tempatkan parameter handler setelah semua argumen yang bergantung padanya.
- Jangan gunakan
dynamicnilai yang ditik sebagai argumen untuk konversi handler string terinterpolasi (CS8953). Pengkompilasi tidak dapat menentukan persyaratan konstruksi handler pada waktu kompilasi ketika nilai dinamis terlibat. Sebagai gantinya, buat instans handler secara manual dan panggil metodenya secara langsung. - Jangan gunakan string terinterpolasi yang mereferensikan instans yang diinisialisasi dalam penginisialisasi anggota pengindeks (CS8976). Selama inisialisasi objek, instans tidak sepenuhnya dibangun, sehingga konversi handler yang mereferensikannya
thistidak diizinkan. Gunakan pernyataan terpisah setelah inisialisasi untuk mengatur nilai pengindeks. - Periksa konteks di mana Anda menggunakan argumen handler string terinterpolasi (CS9325). Beberapa konteks tidak mendukung atribut argumen handler. Dalam kasus ini, gunakan string terinterpolasi reguler atau buat handler secara manual.