İfade ağaçlarında yasaklanan ifadelerden oluşturulan hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını kapsar:

  • CS0765 - Yalnızca tanımlama bildirimine sahip kısmi yöntemler veya kaldırılan koşullu yöntemler ifade ağaçlarında kullanılamaz.
  • CS0831 - İfade ağacı temel erişim içermeyebilir.
  • CS0832 - İfade ağacı atama işleci içermeyebilir
  • CS0834 - Deyim gövdesine sahip lambda ifadesi ifade ağacına dönüştürülemez.
  • CS0835 - Lambda ifadesi, tür bağımsız değişkeni 'type' bir temsilci türü olmadığı için bir ifade ağacına dönüştürülemez.
  • CS0838 - İfade ağacı çok boyutlu dizi başlatıcı içermeyebilir.
  • CS0845 - İfade ağacı lambda, sol tarafında null veya varsayılan değişmez değer olan bir birleştirme işleci içermeyebilir.
  • CS0853 - İfade ağacı adlandırılmış bağımsız değişken belirtimi içermeyebilir.
  • CS0854 - İfade ağacı, isteğe bağlı bağımsız değişkenler kullanan bir çağrı veya başlatma içermemelidir.
  • CS0855 - İfade ağacı dizine alınan bir özellik içermeyebilir.
  • CS1944 - İfade ağacı güvenli olmayan bir işaretçi işlemi içermeyebilir.
  • CS1945 - İfade ağacı anonim bir yöntem ifadesi içermeyebilir.
  • CS1946 - Anonim yöntem ifadesi bir ifade ağacına dönüştürülemez.
  • CS1951 - İfade ağacı lambda bir refveya inout parametresi içermeyebilir.
  • CS1952 - Lambda ifade ağacı değişken sayıda bağımsız değişken içeren bir yöntem içeremez.
  • CS1963 - İfade ağacı dinamik işlem içermeyebilir.
  • CS1989 - Zaman uyumsuz lambda ifadeleri ifade ağaçlarına dönüştürülemez.
  • CS2037 - İfade ağacı lambda ifadesi, bağımsız değişkenlerden 'ref' atlandığında bir COM çağrısı içermemelidir.
  • CS7053 - İfade ağacı "özellik" içermeyebilir.
  • CS8072 - Lambda ifade ağacı null yayma işleci içermeyebilir.
  • CS8074 - Lambda ifade ağacı sözlük başlatıcısı içermeyebilir.
  • CS8075 - Lambda ifadesindeki koleksiyon başlatıcısı için uzantı Add yöntemi desteklenmez.
  • CS8110 - İfade ağacı yerel işleve başvuru içermeyebilir.
  • CS8122 - İfade ağacı 'is' desen eşleştirme işleci içermeyebilir.
  • CS8143 - İfade ağacı bir demet sabiti içermemelidir.
  • CS8144 - İfade ağacı bir tuple dönüşümünü içermemelidir.
  • CS8153 - İfade ağacı lambda, başvuruyla döndüren bir yönteme, özelliğe veya dizin oluşturucuya çağrı içermeyebilir.
  • CS8155 - Başvuru ile döndüren lambda ifadeleri ifade ağaçlarına dönüştürülemezler.
  • CS8188 - Bir ifade ağacı, throw ifadesi içeremez.
  • CS8198 - İfade ağacı bir out bağımsız değişken bildirimi içermeyebilir.
  • CS8207 - İfade ağacı kullanılmayan değişken bulunduramaz.
  • CS8382 - İfade ağacı bir demet == veya != işleci içermemelidir.
  • CS8514 - İfade ağacı anahtar ifadesi içermeyebilir.
  • CS8640 - İfade ağacı, başvuru yapısının veya kısıtlanmış türün değerini içeremez.
  • CS8642 - İfade ağacı null birleştirme ataması içermeyebilir.
  • CS8790 - İfade ağacı bir desen System.Index veya System.Range dizin oluşturucu erişimi içermeyebilir.
  • CS8791 - İfade ağacı bir from-end index ('^') ifadesi içermeyebilir.
  • CS8792 - İfade ağacı bir aralık ('..') ifadesi içermeyebilir.
  • Yöntem gruplarında CS8810 - '&' ifade ağaçlarında kullanılamaz.
  • CS8849 - İfade ağacı bir with ifadesi içermemelidir.
  • CS8927 - İfade ağacı statik sanal veya soyut arabirim üyesi erişimi içermeyebilir.
  • CS8952 - İfade ağacı, ilişkilendirilmiş dize işleyicisi dönüştürmesi içermeyebilir.
  • CS8972 - Öznitelikleri olan bir lambda ifadesi bir ifade ağacına dönüştürülemez.
  • CS9170 - İfade ağacı satır içi dizi erişimi veya dönüştürmesi içermeyebilir.
  • CS9175 - İfade ağacı koleksiyon ifadesi içermeyebilir.
  • CS9226 - bir ifade ağacı, dizi dışı params koleksiyon parametresinin genişletilmiş bir biçimini içermeyebilir.
  • CS9296 - İfade ağacı bir uzantı özelliği veya dizin oluşturucu erişimi içermeyebilir.
  • CS9307 - İfade ağacı, konum dışında adlandırılmış bağımsız değişken belirtimi içermeyebilir.
  • CS9369 - İfade ağacı birleşim dönüştürmesi içermeyebilir.

İfade ağacı kısıtlamaları

Yukarıdaki listedeki hataların tümü, ifade ağacında izin verilmeyen bir C# ifade türü kullandığınızı gösterir. Çoğu durumda yasaklanmış ifadeler, C# 3.0'ın ardından gelen söz dizimini temsil eder. bu ifadelere izin vermek, ifade ağaçlarını ayrıştıran tüm kitaplıklarda hataya neden olan bir değişiklik oluşturacağından yasaktır. Daha yeni yapılara izin veriliyorsa yeni C# ifadelerini ayrıştırmak için tüm kitaplıkların geliştirilmesi gerekir.

Aşağıdaki ifadeler yasaktır:

Diğer kısıtlamalar şunlardır:

  • Uzantı özelliklerine ve dizin oluşturucularına uzantı olarak erişemezsiniz.
  • Lambda ifadesine, parametrelerine veya dönüşe öznitelik uygulanamaz.
  • Lambda ifadesi, tür parametresi temsilci türü olan System.Linq.Expressions.Expression'den türetilen bir türe dönüştürülebilir olmalıdır.
  • Adlandırılmış ve isteğe bağlı parametreler kısıtlandı. İfade, adlandırılmış bağımsız değişkenleri belirten bir yöntemi çağıramaz ve isteğe bağlı bir parametrenin varsayılan değerini kullanamaz.
  • Sözlük başlatıcıları veya uzantı Add yöntemleri kullanılamaz.
  • Hedef ifade bir lambda ifadesi olmalıdır. Sabitlere ve değişkenlere izin verilmez, ancak sabit veya değişken döndüren bir lambda ifadesine izin verilir.
  • Güvenli olmayan işaretçi işlemlerine izin verilmez.
  • COM çağrıları bağımsız değişkenlere dahil ref edilmelidir; bu ima edilemez.
  • Desteklenmeyen __arglist anahtar sözcük.