Mengatasi kesalahan dan peringatan yang dihasilkan dari ekspresi yang dilarang di pohon ekspresi

Artikel ini membahas kesalahan pengkompilasi berikut:

  • CS0765 - Metode parsial yang hanya memiliki deklarasi pendefinisian atau metode bersyarat yang telah dihapus tidak dapat digunakan dalam pohon ekspresi.
  • CS0831 - Pohon ekspresi mungkin tidak berisi akses dasar.
  • CS0832 - Pohon ekspresi mungkin tidak berisi operator penugasan
  • CS0834 - Ekspresi lambda dengan badan pernyataan tidak dapat dikonversi ke pohon ekspresi.
  • CS0835 - Tidak dapat mengonversi lambda ke pohon ekspresi yang argumen jenisnya 'type' bukan tipe delegasi.
  • CS0838 - Sebuah pohon ekspresi tidak boleh berisi penginisialisasi array multidimensi.
  • CS0845 - Lambda pohon ekspresi mungkin tidak berisi operator coalescing dengan sisi kiri harfiah null atau default.
  • CS0853 - Pohon ekspresi mungkin tidak berisi spesifikasi argumen bernama.
  • CS0854 - Pohon ekspresi tidak boleh berisi pemanggilan yang menggunakan argumen opsional.
  • CS0855 - Pohon ekspresi mungkin tidak berisi properti terindeks.
  • CS1944 - Pohon ekspresi mungkin tidak berisi operasi penunjuk yang tidak aman.
  • CS1945 - Pohon ekspresi mungkin tidak berisi ekspresi metode anonim.
  • CS1946 - Ekspresi metode anonim tidak dapat dikonversi ke pohon ekspresi.
  • CS1951 - Lambda pohon ekspresi mungkin tidak berisi refparameter , in atau out .
  • CS1952 - Lambda pohon ekspresi mungkin tidak berisi metode dengan argumen variabel.
  • CS1963 - Pohon ekspresi mungkin tidak berisi operasi dinamis.
  • CS1989 - Ekspresi lambda asinkron tidak dapat dikonversi ke pohon ekspresi (expression tree).
  • CS2037 - Pohon ekspresi lambda mungkin tidak berisi panggilan COM dengan argumen yang ref dihilangkan.
  • CS7053 - Pohon ekspresi mungkin tidak berisi "fitur".
  • CS8072 - Lambda pada pohon ekspresi tidak boleh mengandung operator propagasi null.
  • CS8074 - Lambda pohon ekspresi mungkin tidak berisi inisialisasi kamus.
  • CS8075 - Metode ekstensi Add tidak didukung untuk penginisialisasi koleksi dalam ekspresi lambda.
  • CS8110 - Pohon ekspresi mungkin tidak berisi referensi ke fungsi lokal.
  • CS8122 - Pohon ekspresi mungkin tidak berisi operator pencocokan pola 'is'.
  • CS8143 - Pohon ekspresi tidak boleh berisi tuple literal.
  • CS8144 - Pohon ekspresi mungkin tidak berisi konversi tuple.
  • CS8153 - Pohon ekspresi lambda tidak boleh berisi panggilan ke metode, properti, atau pengindeks yang mengembalikan berdasarkan referensi.
  • CS8155 - Ekspresi lambda yang mengembalikan nilai berdasarkan referensi tidak dapat dikonversi ke pohon ekspresi.
  • CS8188 - Pohon ekspresi mungkin tidak berisi ekspresi throw.
  • CS8198 - Pohon ekspresi mungkin tidak berisi deklarasi variabel argumen keluar.
  • CS8207 - Pohon ekspresi mungkin tidak berisi buang.
  • CS8382 - Pohon ekspresi mungkin tidak berisi tuple == atau != operator.
  • CS8514 - Pohon ekspresi mungkin tidak berisi ekspresi pengalihan.
  • Pohon Ekspresi CS8640 - tidak boleh berisi nilai struktur ref atau jenis terbatas.
  • CS8642 - Pohon ekspresi mungkin tidak berisi penetapan coalescing null.
  • CS8790 - Pohon ekspresi mungkin tidak berisi pola System.Index atau System.Range akses pengindeks.
  • CS8791 - Pohon ekspresi mungkin tidak berisi ekspresi indeks dari ujung ('^').
  • CS8792 - Pohon ekspresi mungkin tidak berisi ekspresi rentang ('..').
  • CS8810 - '&' pada grup metode tidak dapat digunakan dalam pohon ekspresi.
  • CS8849 - Pohon ekspresi mungkin tidak berisi with-expression.
  • CS8927 - Pohon ekspresi mungkin tidak berisi akses anggota antarmuka virtual atau abstrak statis.
  • CS8952 - Pohon ekspresi mungkin tidak berisi konversi handler string terinterpolasi.
  • CS8972 - Sebuah ekspresi lambda dengan atribut tidak dapat dikonversi menjadi pohon ekspresi.
  • CS9170 - Pohon ekspresi mungkin tidak berisi akses atau konversi array sebaris.
  • CS9175 - Pohon ekspresi mungkin tidak berisi ekspresi koleksi.
  • CS9226 - Pohon ekspresi mungkin tidak berisi bentuk parameter pengumpulan param non-array yang diperluas.
  • CS9296 - Pohon ekspresi mungkin tidak berisi properti ekstensi atau akses pengindeks.
  • CS9307 - Pohon ekspresi tidak boleh berisi spesifikasi argumen bernama yang tidak pada tempatnya.
  • CS9369 - Pohon ekspresi mungkin tidak berisi konversi union.

Pembatasan pohon ekspresi

Semua kesalahan dalam daftar sebelumnya menunjukkan bahwa Anda menggunakan jenis ekspresi C# yang tidak diizinkan di pohon ekspresi. Dalam kebanyakan kasus, ekspresi yang dilarang mewakili sintaksis yang diperkenalkan setelah C# 3.0. Ekspresi ini dilarang karena jika diizinkan akan membuat perubahan pengganggu di semua pustaka yang mengurai pohon ekspresi. Semua library perlu ditingkatkan agar dapat mengurai ekspresi C# yang baru jika konstruksi yang lebih baru diizinkan.

Ekspresi berikut dilarang:

Pembatasan lainnya adalah:

  • Tidak dapat mengakses properti ekstensi dan indekser sebagai ekstensi.
  • Tidak dapat menerapkan atribut ke ekspresi lambda, parameternya, atau pengembaliannya.
  • Ekspresi lambda harus dapat dikonversi menjadi jenis yang diturunkan dari System.Linq.Expressions.Expression, di mana parameter jenisnya adalah tipe delegasi.
  • Parameter bernama dan opsional terbatas. Ekspresi tidak dapat memanggil metode yang menentukan argumen bernama, dan tidak dapat menggunakan nilai default parameter opsional.
  • Tidak dapat menggunakan inisialisasi kamus atau metode ekstensi Add .
  • Ekspresi target harus berupa ekspresi lambda. Konstanta dan variabel tidak diizinkan, tetapi ekspresi lambda yang mengembalikan konstanta atau variabel adalah.
  • Operasi penunjuk tidak aman tidak diperbolehkan.
  • Panggilan COM harus menyertakan ref pada argumen; tidak dapat dianggap implisit.
  • Kata kunci __arglist yang tidak didukung.