Bagikan melalui


Mengatasi kesalahan dan peringatan untuk deklarasi operator dan overflow

Artikel ini membahas kesalahan dan peringatan pengkompilasi berikut:

  • CS0031: Nilai konstanta 'nilai' tidak dapat dikonversi ke 'type'
  • CS0056: Aksesibilitas tidak konsisten: tipe pengembalian 'tipe' kurang dapat diakses daripada operator 'operator'
  • CS0057: Aksesibilitas yang tidak konsisten: jenis parameter 'type' kurang dapat diakses daripada operator 'operator'
  • CS0215: Jenis pengembalian operator True atau False harus bool
  • CS0216: Operator 'operator' memerlukan operator yang cocok 'missing_operator' harus juga didefinisikan
  • CS0217: Agar dapat diterapkan sebagai operator sirkuit pendek operator logis yang ditentukan pengguna ('operator') harus memiliki jenis pengembalian yang sama dengan jenis 2 parameternya.
  • CS0218: Jenis ('type') harus berisi deklarasi operator true dan operator false
  • CS0220: Operasi meluap pada waktu kompilasi dalam mode diperiksa
  • CS0221: Nilai konstanta 'nilai' tidak dapat dikonversi ke 'type' (gunakan sintaks 'unchecked' untuk mengabaikan)
  • CS0448: Tipe pengembalian untuk operator ++ atau -- harus berupa tipe yang mencakup atau diturunkan dari tipe yang mencakup tersebut
  • CS0463: Evaluasi ekspresi konstanta desimal gagal dengan kesalahan: 'kesalahan'
  • CS0543: 'enumerasi' : nilai enumerator terlalu besar untuk jenis nilainya
  • CS0552: 'rutinitas konversi' : konversi yang ditentukan pengguna ke/dari antarmuka
  • CS0553: 'rutinitas konversi' : konversi yang ditentukan pengguna ke/dari kelas dasar
  • CS0554: 'rutinitas konversi' : konversi yang ditentukan pengguna ke/dari kelas turunan
  • CS0555: Operator yang ditentukan pengguna tidak dapat menerima objek dari jenis penutup dan mengonversinya menjadi objek dari jenis penutup
  • CS0556: Konversi yang ditentukan pengguna harus dikonversi ke atau dari jenis penutup
  • CS0557: Duplikasi konversi yang ditentukan pengguna pada tipe
  • CS0558: Operator yang ditentukan pengguna harus dinyatakan statis dan publik
  • CS0559: Jenis parameter untuk ++ atau -- operator harus berupa jenis yang berisi
  • CS0562: Parameter operator unary harus berupa tipe yang mengandung
  • CS0563: Salah satu parameter operator biner harus berupa jenis yang berisi
  • CS0564: Operand pertama operator shift yang kelebihan beban harus memiliki jenis yang sama dengan jenis yang berisi, dan jenis operand kedua harus int
  • CS0567: Antarmuka tidak boleh berisi operator
  • CS0590: Operator yang ditentukan pengguna tidak dapat mengembalikan kekosongan
  • CS0594: Konstanta floating-point berada di luar rentang jenis 'type'
  • CS0652: Perbandingan dengan konstanta integral tidak berguna; konstanta berada di luar rentang jenis 'jenis'
  • CS0659: 'class' mengambil alih Object.Equals(object o) tetapi tidak menimpa Object.GetHashCode()
  • CS0660: Jenis mendefinisikan operator == atau operator != tetapi tidak mengambil alih Object.Equals(object o)
  • CS0661: Jenis mendefinisikan operator == atau operator != tetapi tidak mengambil alih Object.GetHashCode()
  • CS0715: Kelas statis tidak boleh berisi operator yang ditentukan pengguna
  • CS1021: Konstanta integral terlalu besar
  • CS1037: Operator yang dapat kelebihan beban diharapkan
  • CS1553: Deklarasi tidak valid; gunakan 'modifier operator <dest-type> (...) sebagai gantinya
  • CS8930: Implementasi eksplisit operator yang ditentukan pengguna harus dinyatakan statis
  • CS8931: Konversi yang ditentukan pengguna dalam antarmuka harus dikonversi ke atau dari parameter jenis pada jenis penutup yang dibatasi ke jenis penutup
  • CS8778: Nilai konstanta 'value' mungkin meluap 'tipe' saat runtime (gunakan sintaks 'unchecked' untuk mengabaikannya)
  • CS8973: Operasi mungkin mengalami overflow saat runtime (gunakan sintaks 'unchecked' untuk menggantikan)
  • CS9023: Operator tidak dapat dibuat diperiksa.
  • CS9024: Operator tidak dapat dibuat bebas dari pengecekan.
  • CS9025: Operator memerlukan versi yang tidak dicentang yang cocok untuk juga dideklarasikan.
  • CS9027: Kata kunci tak terduga 'tidak dicentang'.
  • CS9308: Operator yang ditentukan pengguna harus dinyatakan publik.
  • CS9310: Jenis pengembalian untuk operator ini harus void.
  • CS9311: Jenis tidak menerapkan anggota antarmuka. Tipe tidak dapat menerapkan anggota karena salah satunya bukan operator.
  • CS9312: Jenis tidak dapat mengambil alih anggota yang diwariskan karena salah satunya bukan operator.
  • CS9313: Operator penetapan senyawa yang kelebihan beban mengambil satu parameter.
  • CS9340: Operator tidak dapat diterapkan ke operand. Kandidat terdekat yang tidak dapat diaplikasikan ditampilkan.
  • CS9341: Operator tidak dapat diterapkan ke operand. Kandidat terdekat yang tidak dapat diaplikasikan ditampilkan.
  • CS9342: Resolusi operator ambigu antara anggota berikut.

Persyaratan tanda tangan operator

  • CS0448: Jenis pengembalian untuk ++ atau -- operator harus berupa jenis yang berisi atau berasal dari jenis yang berisi.
  • CS0559: Jenis parameter untuk ++ atau -- operator harus berupa jenis yang berisi.
  • CS0562: Parameter pada operator unary harus berupa tipe yang memuatnya.
  • CS0563: Salah satu parameter operator biner harus berupa jenis yang berisi.
  • CS0564: Operand pertama pada operator shift yang di-overload harus memiliki tipe yang sama dengan tipe yang memuatnya, dan tipe operand kedua harus int.
  • CS0567: Antarmuka tidak dapat berisi operator.
  • CS0590: Operator yang ditentukan pengguna tidak dapat mengembalikan kekosongan.
  • CS9310: Jenis pengembalian untuk operator ini seharusnya void.
  • CS9340: Operator tidak dapat diterapkan ke operand. Kandidat terdekat yang tidak dapat diaplikasikan ditampilkan.
  • CS9341: Operator tidak dapat diterapkan ke operand. Kandidat terdekat yang tidak dapat diaplikasikan ditampilkan.
  • CS9342: Resolusi operator ambigu antara anggota berikut.

Setiap jenis operator memiliki parameter tertentu dan persyaratan jenis pengembalian yang ditentukan oleh spesifikasi bahasa. Untuk aturan lengkap di mana operator dapat kelebihan beban, lihat Operator kelebihan beban dan Operator dalam spesifikasi C#.

  • Ubah jenis pengembalian dari operator ++ atau -- ke jenis yang mengandungnya atau jenis yang diturunkan darinya (CS0448). Bahasa ini mengharuskan operator kenaikan dan penurunan mengembalikan nilai yang kompatibel dengan jenis yang berisi sehingga hasilnya dapat ditetapkan kembali ke variabel yang sama.
  • Ubah parameter operator ++ atau -- menjadi jenis yang mengandung (CS0559). Operator penambahan dan pengurangan harus beroperasi pada instance jenisnya sendiri.
  • Ubah parameter operator unary menjadi jenis yang berisi (CS0562). Operator unary harus menerima operand dari tipe yang mendeklarasikannya.
  • Pastikan setidaknya satu parameter operator biner adalah jenis yang berisi (CS0563). Operator biner harus melibatkan jenis yang mendeklarasikan sehingga pengkompilasi dapat menyelesaikannya melalui jenis tersebut.
  • Ubah parameter pertama operator shift menjadi tipe pembungkus dan parameter kedua menjadi int (CS0564). Bahasa pemrograman mendefinisikan operator shift dengan tanda tangan tipe tertentu: tipe yang digeser dan jumlah pergeseran bilangan bulat.
  • Pindahkan deklarasi operator dari antarmuka dan ke kelas atau struktur (CS0567). Deklarasi operator tradisional (abstrak non-statis) tidak diizinkan dalam antarmuka. Untuk operator abstrak statis dalam antarmuka, lihat Kesalahan abstrak statis dan anggota antarmuka virtual.
  • Ubah jenis pengembalian operator menjadi jenis non-void (CS0590). Sebagian besar operator yang ditentukan pengguna harus mengembalikan nilai. Pengecualiannya adalah operator penugasan majemuk, yang memerlukan void jenis pengembalian (CS9310).
  • Koreksi jenis parameter atau tambahkan kelebihan beban operator yang hilang sehingga pengkompilasi dapat menemukan operator yang cocok untuk jenis operand yang digunakan di situs panggilan (CS9340, CS9341). Ketika tidak ada operator yang berlaku, pengompilasi menunjukkan kandidat terdekat untuk membantu mendiagnosis ketidakcocokan.
  • Tambahkan cast eksplisit di lokasi panggilan, atau berikan overload yang lebih spesifik untuk menghilangkan ambiguitas ketika beberapa operator overload cocok sama baiknya (CS9342).

Penting

Syarat tanda tangan untuk operator biner statis dan operator penetapan gabungan instance yang sesuai berbeda. Pastikan tanda tangan cocok dengan deklarasi yang Anda inginkan.

Persyaratan deklarasi operator

  • CS0558: Operator yang ditentukan pengguna harus dinyatakan statis dan publik.
  • CS0715: Kelas statis tidak dapat berisi operator yang ditentukan pengguna.
  • CS1037: Operator yang dapat kelebihan beban diharapkan.
  • CS1553: Deklarasi tidak valid; gunakan 'modifier operator <dest-type> (...' sebagai gantinya.
  • CS9308: Operator yang ditentukan pengguna harus dinyatakan publik.

Bahasa ini memerlukan pengubah dan sintaksis tertentu untuk deklarasi operator. Untuk aturan lengkap, lihat Operator kelebihan beban dan operator konversi yang ditentukan pengguna.

  • Tambahkan pengubah static dan public ke deklarasi operator (CS0558, CS9308). Bahasa C# mengharuskan semua operator yang ditentukan pengguna menjadi statis dan publik sehingga dapat diakses dan dipanggil tanpa instans.
  • Pindahkan deklarasi operator dari kelas statis ke kelas atau struktur non-statis (CS0715). Kelas statis tidak dapat memiliki instans, sehingga operator yang ditentukan pengguna—yang beroperasi pada instans jenis yang berisinya—tidak bermakna dalam kelas statis.
  • Ganti simbol operator yang tidak valid dengan operator yang dapat kelebihan beban (CS1037) yang valid. Hanya operator tertentu yang ditentukan oleh bahasa yang dapat kelebihan beban.
  • Koreksi sintaks untuk mengikuti formulir operator konversi yang diperlukan: public static implicit operator <dest-type>(<source-type> parameter) atau public static explicit operator <dest-type>(<source-type> parameter) (CS1553). Pengkompilasi mengharapkan operator konversi untuk mengikuti pola deklarasi tertentu.

Untuk kesalahan yang terkait dengan implementasi antarmuka eksplisit operator dalam antarmuka abstrak statis, lihat Kesalahan abstrak statis dan anggota antarmuka virtual.

Aksesibilitas yang tidak konsisten

  • CS0056: Aksesibilitas yang tidak konsisten: tipe pengembalian 'type' kurang dapat diakses dibandingkan operator 'operator'.
  • CS0057: Aksesibilitas yang tidak konsisten: jenis parameter 'type' kurang dapat diakses daripada operator 'operator'.

Semua jenis yang digunakan dalam tanda tangan operator publik harus setidaknya dapat diakses seperti operator itu sendiri. Untuk aturan lengkapnya, lihat Pengubah Akses dan Batasan Aksesibilitas dalam spesifikasi C#.

  • Ubah jenis pengembalian menjadi jenis yang setidaknya dapat diakses oleh operator, atau kurangi aksesibilitas operator agar sesuai dengan jenis pengembalian (CS0056). Operator public tidak dapat mengekspos tipe yang kurang dapat diakses melalui nilai kembalian karena pemanggil di luar assembly tidak akan dapat menggunakan hasilnya.
  • Ubah jenis parameter menjadi jenis yang setidaknya dapat diakses oleh operator, atau kurangi aksesibilitas operator agar sesuai dengan jenis parameter (CS0057). Operator public tidak dapat memerlukan tipe yang tidak terlalu dapat diakses sebagai parameter karena pemanggil di luar assembly tidak akan dapat memberikan argumen.

Pembatasan konversi yang ditentukan pengguna

  • CS0552: Konversi yang ditentukan pengguna ke/dari antarmuka.
  • CS0553: Konversi yang ditentukan pengguna ke/dari kelas dasar.
  • CS0554: Konversi yang ditentukan pengguna ke/dari kelas turunan.
  • CS0555: Operator yang ditentukan pengguna tidak dapat mengambil objek dari tipe yang melingkupi dan mengonversi menjadi objek dari tipe yang melingkupi.
  • CS0556: Konversi yang ditentukan pengguna harus dikonversi ke atau dari jenis penutup.
  • CS0557: Menduplikasi konversi yang ditentukan pengguna dalam jenis.

Bahasa C# membatasi jenis mana yang dapat berpartisipasi dalam konversi yang ditentukan pengguna. Untuk aturan lengkapnya, lihat Operator konversi yang ditentukan pengguna dan Operator konversi dalam spesifikasi C#.

  • Hapus operator konversi yang mengonversi ke atau dari jenis antarmuka (CS0552). Bahasa ini melarang konversi yang ditentukan pengguna yang melibatkan tipe antarmuka karena konversi antarmuka ditangani melalui konversi referensi sistem tipe dan pengkotakan. Gunakan implementasi antarmuka eksplisit atau metode pembantu sebagai gantinya.
  • Hapus operator konversi yang mengonversi ke atau dari kelas dasar (CS0553). Konversi antara jenis dan kelas dasarnya sudah ada melalui konversi referensi implisit (upcast) dan konversi referensi eksplisit (downcast), sehingga konversi yang ditentukan pengguna akan membuat ambiguitas.
  • Hapus operator konversi yang mengonversi ke atau dari kelas turunan (CS0554). Seperti konversi kelas dasar, konversi antara kelas dan turunannya terintegrasi dalam bahasa melalui pewarisan, dan konversi yang ditentukan pengguna akan bertentangan dengannya.
  • Hapus operator konversi yang mengonversi jenis penutup menjadi dirinya sendiri (CS0555). Setiap jenis sudah memiliki konversi identitas implisit ke dirinya sendiri, sehingga konversi yang ditentukan pengguna dari jenis ke jenis yang sama berlebihan dan tidak diizinkan.
  • Ubah salah satu jenis di operator konversi sehingga jenis sumber atau tujuan adalah jenis penutup (CS0556). Konversi yang ditentukan pengguna harus melibatkan jenis yang mendeklarasikannya—Anda tidak dapat menentukan konversi antara dua jenis eksternal yang tidak terkait dalam jenis ketiga.
  • Hapus operator konversi duplikat, atau ubah salah satu operator duplikat sehingga jenis sumber dan tujuan berbeda dari yang lain (CS0557). Jenis hanya dapat mendeklarasikan satu konversi implisit dan satu konversi eksplisit untuk sepasang jenis sumber dan tujuan tertentu.

Operator Boolean dan sirkuit pendek

  • CS0215: Jenis pengembalian operator true atau false harus bool.
  • CS0216: Operator mengharuskan adanya operator yang sesuai untuk didefinisikan.
  • CS0217: Agar dapat diterapkan sebagai operator sirkuit pendek, operator logis yang ditentukan pengguna harus memiliki jenis pengembalian yang sama dengan jenis 2 parameternya.
  • CS0218: Jenis harus berisi deklarasi operator true dan operator false.

Bahasa C# memerlukan pasangan dan tanda tangan tertentu untuk operator Boolean dan evaluasi sirkuit pendek. Untuk aturan lengkap, lihat operator benar dan salah, operator logis Boolean, dan operator logis bersyarat yang ditentukan pengguna dalam spesifikasi C#.

  • Ubah jenis pengembalian dari operator true dan operator false ke bool (CS0215). Operator ini menentukan apakah nilai secara logis benar atau salah, sehingga bahasa mengharuskan mereka untuk mengembalikan bool.
  • Tentukan operator berpasangan yang cocok (CS0216). Bahasa ini mengharuskan operator tertentu untuk dideklarasikan dalam pasangan: operator == dengan operator !=, operator < dengan operator >, operator <= dengan operator >=, dan operator true dengan operator false.
  • Ubah jenis pengembalian operator & atau | yang didefinisikan pengguna agar sesuai dengan kedua jenis parameter (CS0217). Untuk evaluasi sirkuit pendek (&& dan ||), kompilator memerlukan jenis pengembalian operator & atau |, kedua jenis parameter, dan jenis yang mengandung semuanya harus sama.
  • Tambahkan deklarasi operator true dan operator false ke jenis (CS0218). Pengkompilasi menulis ulang && dan || menggunakan operator true, operator false, serta operator & atau | yang sesuai, sehingga ketiganya harus ada agar evaluasi sirkuit pendek dapat berfungsi.

Operator yang diperiksa

  • CS9023: Operator tidak dapat dibuat diperiksa
  • CS9024: Operator tidak dapat dibuat tidak diawasi
  • CS9025: Operator yang diperiksa memerlukan versi yang tidak dicentang yang cocok untuk juga dideklarasikan
  • CS9027: Kata kunci tak terduga 'tidak dicentang'

checked dan unchecked sebagai kata kunci hanya dapat diterapkan ke deklarasi operator tertentu. Untuk aturan lengkapnya, lihat Operator aritmatika dan operator yang diperiksa yang ditentukan pengguna.

  • checked Hapus kata kunci atau unchecked dari operator yang tidak didukung (CS9023, CS9024). Hanya operator aritmatika +, -, *, /, ++, --, dan operator konversi eksplisit yang mendukung varian diperiksa dan tidak diperiksa. Operator lain, seperti operator perbandingan atau kesetaraan, tidak memiliki perilaku luapan yang berbeda dan tidak dapat ditandai dicentang atau tidak dicentang.
  • Tambahkan versi operator yang tidak dicentang yang cocok (CS9025). Operator checked menyediakan perilaku melempar luapan, tetapi pengkompilasi juga memerlukan versi yang tidak dicentang yang sesuai untuk digunakan dalam unchecked konteks dan sebagai default ketika tidak ada konteks yang ditentukan.
  • unchecked Hapus kata kunci dari posisi yang tidak valid (CS9027). Kata unchecked kunci dalam deklarasi operator hanya valid sebagai bagian dari sintaks operator (misalnya, public static explicit operator unchecked int(MyType t)). Menempatkannya di tempat lain dalam deklarasi menyebabkan kesalahan sintaks.

Persyaratan antarmuka dan pewarisan

  • CS9311: Jenis tidak menerapkan anggota antarmuka. Jenis tidak dapat menerapkan anggota karena salah satunya bukan operator
  • CS9312: Jenis tidak dapat mengambil alih anggota yang diwariskan karena salah satunya bukan operator
  • CS9313: Operator penetapan senyawa yang kelebihan beban mengambil satu parameter

Kompilator memberlakukan pencocokan ketat antara deklarasi operator dan anggota antarmuka atau anggota kelas dasar yang mereka terapkan atau ambil alih. Untuk aturan lengkap, lihat Operator kelebihan beban dan Antarmuka.

  • Ubah anggota pelaksana menjadi deklarasi operator yang cocok dengan anggota operator antarmuka, atau ubah anggota antarmuka menjadi metode jika anggota pelaksana adalah metode (CS9311). Operator hanya dapat menerapkan anggota antarmuka yang juga dinyatakan sebagai operator—Anda tidak dapat memenuhi kontrak operator dengan metode reguler, atau sebaliknya.
  • Ubah anggota yang menimpa menjadi deklarasi operator yang sesuai dengan anggota operator kelas dasar, atau ubah anggota kelas dasar menjadi metode jika anggota kelas turunan adalah metode (CS9312). Seperti implementasi antarmuka, penimpaan harus sesuai dengan jenis anggota yang digantikan—operator tidak dapat menggantikan anggota non-operator.
  • Ubah deklarasi operator penugasan majemuk untuk menerima tepat satu parameter (CS9313). Operator penetapan gabungan adalah anggota instans di mana operand kiri secara implisit this, sehingga hanya operand kanan yang dinyatakan sebagai parameter.

Operator Kesetaraan

  • CS0659: 'class' mengambil alih Object.Equals(object o) tetapi tidak menimpa Object.GetHashCode()
  • CS0660: Tipe mendefinisikan operator == atau operator != tetapi tidak menggantikan Object.Equals(object o)
  • CS0661: Jenis mendefinisikan operator == atau operator != tetapi tidak menimpa Object.GetHashCode()

Pengkompilasi mengharuskan penimpaan terkait kesetaraan dan definisi operator tetap sinkron. Saat Anda mengambil alih Object.Equals atau menentukan operator == / operator !=, Anda juga harus memberikan penimpaan terkait. Untuk aturan lengkap, lihat Cara menentukan kesetaraan nilai untuk operator jenis dan Kesetaraan.

  • Tambahkan penimpaan Object.GetHashCode saat Anda mengambil alih Object.Equals (CS0659). Koleksi berbasis hash seperti Dictionary<TKey,TValue> dan HashSet<T> mengandalkan kontrak bahwa dua objek yang sama harus mengembalikan kode hash yang sama. Tanpa penggantian GetHashCode yang sesuai, objek yang dibandingkan sebagai sama mungkin akan diproses hash ke bucket yang berbeda, menyebabkan pencarian dan deduplikasi gagal secara diam-diam.
  • Tambahkan penimpaan Object.Equals saat Anda menentukan operator == atau operator != (CS0660). Kode yang memanggil Equals secara langsung—termasuk banyak API kerangka kerja, metode LINQ, dan operasi pengumpulan—tidak akan menggunakan operator kustom Anda. Tanpa penimpaan yang konsisten Equals, kedua objek mungkin dinilai sama oleh == tetapi tidak oleh Equals, yang mengarah ke perilaku yang tidak dapat diprediksi.
  • Tambahkan penimpaan Object.GetHashCode saat Anda menentukan operator == atau operator != (CS0661). Seperti CS0659, Anda perlu GetHashCode konsisten dengan semantik kesetaraan Anda. Jika operator == menganggap dua objek sama tetapi mengembalikan kode hash yang berbeda, koleksi berbasis hash tidak akan berfungsi dengan benar.

Kesalahan pengisian berlebih dan pengisian kurang

  • CS0031: Nilai konstanta 'nilai' tidak dapat dikonversi ke 'type'
  • CS0220: Operasi meluap pada waktu kompilasi dalam mode pengecekan
  • CS0221: Nilai konstanta 'value' tidak dapat dikonversi ke 'type' (gunakan sintaks 'unchecked' untuk mengambil alih)
  • CS0463: Evaluasi ekspresi konstanta desimal gagal dengan kesalahan: 'kesalahan'
  • CS0543: 'enumerasi' : nilai enumerator terlalu besar untuk muat dalam jenisnya
  • CS0594: Konstanta floating-point berada di luar rentang jenis 'type'
  • CS0652: Perbandingan dengan konstanta integral tidak berguna; konstanta berada di luar rentang jenis 'jenis'
  • CS1021: Konstanta integral terlalu besar
  • CS8778: Nilai konstanta 'nilai' mungkin melampaui batas 'tipe' pada runtime (gunakan sintaksis 'unchecked' untuk mengambil alih)
  • CS8973: Operasi mungkin meluap saat runtime (gunakan sintaks 'unchecked' untuk mengabaikan)

Pengkompilasi mengevaluasi ekspresi konstan pada waktu kompilasi dan melaporkan kesalahan atau peringatan ketika nilai melebihi rentang yang valid dari jenis targetnya. Untuk aturan lengkap, lihat pernyataan yang dicentang dan tidak dicentang dan Jenis integral.

  • Ubah nilai konstanta menjadi nilai yang pas dalam rentang jenis target, atau ubah target menjadi jenis numerik yang lebih besar (CS0031). Pengkompilasi tidak dapat secara implisit mempersempit konstanta yang tidak cocok—misalnya, menetapkan 256 ke byte (rentang 0–255) menghasilkan kesalahan ini. Jika pemotongan disengaja, gunakan cast eksplisit dalam konteks unchecked.
  • Perbaiki aritmatika dalam ekspresi konstanta sehingga hasilnya sesuai dengan jenis target, atau bungkus ekspresi dalam konteks yang tidak dicentang untuk memungkinkan luapan senyap (CS0220). Kompilator mengevaluasi seluruh ekspresi konstanta pada waktu kompilasi dalam konteks yang diperiksa secara default, sehingga hasil perantara atau akhir yang melebihi rentang jenis menyebabkan kesalahan ini.
  • Ubah nilai konstanta atau jenis target sehingga konversi valid, atau bungkus ekspresi dalam unchecked konteks jika Anda sengaja menginginkan hasil terpotong (CS0221). Tidak seperti CS0220, kesalahan ini berlaku untuk konversi konstan eksplisit di mana nilai sumber tidak sesuai dengan jenis tujuan.
  • Sederhanakan atau uraikan ekspresi konstan decimal agar tetap berada dalam rentang dan presisi yang sesuai dengan tipe decimal (CS0463). Jenis ini decimal memiliki nilai maksimum sekitar $7,9 \kali 10^{28}$ dan 28–29 digit signifikan, dan kompilator mengevaluasi ekspresi lengkap pada waktu kompilasi.
  • Ubah nilai anggota enum menjadi nilai yang sesuai dengan jenis enum yang mendasar, atau ubah jenis yang mendasar menjadi jenis integral yang lebih besar (CS0543). Secara default, enum menggunakan int sebagai tipe dasar. Jika nilai dari anggota melebihi rentang dari jenis dasarnya, tentukan jenis yang lebih besar seperti long.
  • Ubah konstanta floating-point menjadi nilai dalam rentang jenis target, atau gunakan jenis presisi yang lebih tinggi seperti double bukan float (CS0594). Jenis ini float mendukung nilai hingga sekitar $3,4 \kali 10^{38}$, dan double mendukung hingga sekitar $1,7 \kali 10^{308}$.
  • Hapus atau perbaiki perbandingan sehingga konstanta berada dalam rentang jenis variabel (CS0652). Membandingkan variabel dengan byte300, misalnya, tidak pernah benar, sehingga pengkompilasi memperingatkan bahwa perbandingan tidak berguna. Peringatan ini sering menunjukkan kesalahan logika atau ketidakcocokan antara jenis variabel dan rentang nilai yang dimaksudkan.
  • Gunakan jenis numerik yang lebih besar atau pisahkan nilai di beberapa operasi (CS1021). Kesalahan ini terjadi ketika bilangan bulat literal melebihi rentang bahkan jenis integral terbesar (ulong, hingga $1,8 \kali 10^{19}$). Untuk nilai di luar rentang tersebut, pertimbangkan untuk menggunakan BigInteger.
  • Bungkus ekspresi dengan konteks unchecked untuk menekan peringatan, atau ubah nilai agar sesuai dengan rentang tipe target (CS8778). Peringatan ini menunjukkan konversi konstan yang mungkin kehilangan data saat runtime—pengkompilasi tidak dapat membuktikan luapan pasti akan terjadi, tetapi mengidentifikasi risikonya.
  • Bungkus ekspresi tersebut dalam konteks unchecked untuk menekan peringatan, atau restrukturisasi aritmatika untuk menghindari potensi kelebihan (CS8973). Peringatan ini mirip dengan CS8778 tetapi berlaku untuk operasi aritmatika daripada konversi—pengkompilasi mendeteksi bahwa operasi mungkin meluap pada runtime.