Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Lambda ifadelerini bildirme ve kullanmayla ilgili birkaç hata vardır:
- CS0748: Tutarsız lambda parametre kullanımı; parametre türlerinin tümü açık veya tamamen örtük olmalıdır.
- CS1621: Verim deyimi anonim bir yöntem veya lambda ifadesi içinde kullanılamaz.
-
CS1628: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde
inrefoutparametresi kullanılamaz. - CS1632: Denetim anonim bir yöntemin veya lambda ifadesinin gövdesinden ayrılamaz.
- CS1673: Yapıların içindeki anonim yöntemler, lambda ifadeleri ve sorgu ifadeleri 'this' öğesinin örnek üyelerine erişemez.
- CS1686: Yerel değişken veya üyelerinin adresleri alınamaz ve anonim bir yöntem veya lambda ifadesi içinde kullanılamaz.
- CS1706: İfade anonim yöntemler veya lambda ifadeleri içeremez.
- CS8030: Geçersiz dönen temsilciye dönüştürülen anonim işlev bir değer döndüremez.
- CS8175: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde yerel başvuru kullanılamaz.
- CS8916: Lambda ifadelerindeki öznitelikler parantez içinde parametre listesi gerektirir.
- CS8971: InterpolatedStringHandlerArgument, lambda parametrelerine uygulandığında hiçbir etkiye sahip değildir ve çağrı sitesinde yoksayılır.
-
CS8975: Bağlamsal anahtar sözcük
varaçık lambda dönüş türü olarak kullanılamaz. - CS9098: Örtük olarak yazılan lambda parametresi '...' varsayılan değere sahip olamaz.
Buna ek olarak, lambda ifadelerini bildirme ve kullanmayla ilgili birkaç uyarı vardır:
- CS8971: InterpolatedStringHandlerArgument, lambda parametrelerine uygulandığında hiçbir etkiye sahip değildir ve çağrı sitesinde yoksayılır.
- CS9099: Varsayılan parametre değeri hedef temsilci türünde eşleşmiyor.
- CS9100: Parametrenin lambda'da param değiştiricisi var ancak hedef temsilci türünde yok.
Derleyici ayrıca aşağıdaki bilgilendirme iletisini de üretir:
- CS9236: Derleme, lambda ifadesinin en az sayım sürelerini bağlamasını gerektirir. Lambda ifadesini açık parametre türleriyle bildirmeyi göz önünde bulundurun veya içeren yöntem çağrısı genelse, açık tür bağımsız değişkenlerini kullanmayı göz önünde bulundurun.
Lambda ifadelerinde söz dizimi sınırlamaları
Lambda ifadelerinde ve anonim yöntemlerde bazı C# söz dizimi yasaktır. Lambda ifadesinde geçersiz yapıların kullanılması aşağıdaki hatalara neden olur:
-
CS1621: deyimi
yieldanonim bir yöntem veya lambda ifadesi içinde kullanılamaz. : CS1628 :Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde , veya parametresi kullanılamaz. - CS1632: Denetim anonim bir yöntemin veya lambda ifadesinin gövdesinden ayrılamaz.
-
CS1673: Yapıların içindeki anonim yöntemler, lambda ifadeleri ve sorgu ifadeleri
this'ün örnek üyelerine erişemez. - CS1686: Yerel değişken veya üyelerinin adresleri alınamaz ve anonim bir yöntem veya lambda ifadesi içinde kullanılamaz.
- CS8175: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde yerel başvuru kullanılamaz.
Lambda ifadelerinde aşağıdaki tüm yapılara izin verilmez:
-
yielddeyimleri (yield returnveyayield break) - ,
inveyarefparametresi olan biroutyöntemi çağırma -
refyerel değişkenler -
break,gotovecontinuedeyimleri -
thiserişimi,thisbirstructtürü olduğunda - Özellik oluşturucu gibi başka bir ifadenin içinde anonim yöntemler veya lambda ifadeleri kullanmak.
Bu yapıların hiçbirini bir lambda ifadesinde veya anonim bir yöntemde kullanamazsınız. Yerel bir işlevde çoğuna izin verilir.
Ayrıca, bir lambda parametresine uygulandığında interpolasyonlu dize işleyici türleri yoksayılır. Birini kullanırsanız, aşağıdaki uyarıyı görürsünüz:
- CS8971: InterpolatedStringHandlerArgument, lambda parametrelerine uygulandığında hiçbir etkiye sahip değildir ve çağrı sitesinde yoksayılır.
Bazı ifadeler derleyicinin aşağıdaki bilgilendirici uyarıyı yaymasına neden olur:
- CS9236: Derleme işlemi, lambda ifadesinin en az belirtilen sayıda defa bağlanmasını gerektirir. Lambda ifadesini açık parametre türleriyle bildirmeyi düşünün veya içeren yöntem çağrısı genel ise, açık tür bağımsız değişkenlerini kullanmayı göz önünde bulundurun.
Lambda ifadelerinin karmaşıklığı ve diğer lambda ifadelerini çağırma yöntemleri derleyici performansını olumsuz etkiler. Bunun nedeni, derleyicinin lambda ifadeleri aracılığıyla parametre ve bağımsız değişken türlerini çıkarması ve olası türlerin zaman almasıdır.
Lambda ifade parametreleri ve dönüşleri
Bu hatalar parametre bildirimiyle ilgili bir sorunu gösterir:
- CS0748: Tutarsız lambda parametre kullanımı; parametre türlerinin tümü açık veya tamamen örtük olmalıdır.
- CS9098: Örtük olarak yazılan lambda parametresi '...' varsayılan değere sahip olamaz.
- CS8030: Geçersiz dönen temsilciye dönüştürülen anonim işlev bir değer döndüremez.
- CS8916: Lambda ifadelerindeki öznitelikler parantez içinde parametre listesi gerektirir.
- CS8975: 'var' bağlamsal anahtar sözcüğü açık lambda dönüş türü olarak kullanılamaz.
Lambda ifade parametreleri şu kurallara uymalıdır:
- Lambda ifadesinde birden çok parametre olduğunda, tüm parametrelerin açıkça yazılması veya tüm parametrelerin örtük olarak yazılması gerekir.
- Varsayılan değere sahip tüm lambda parametreleri açıkça yazılmalıdır.
- Öznitelikler herhangi bir parametreye uygulanırsa, parametre listesi parantez içine alınmalıdır.
Lambda ifadesinin dönüş türleri şu kurallara uymalıdır:
- Herhangi bir değer döndüren bir lambda ifadesi,
voiddöndüren birActiontemsilciye dönüştürülemez. - Dönüş türü ya çıkarılır (sonuçlandırılır) ya da açık bir türdür. anahtar sözcüğü
varkullanılarak bildirilen bir dönüş türüne izin verilmez.
Lambda ifadesi temsilci türü
- CS9099: Uyarı: Varsayılan parametre değeri hedef temsilci türünde eşleşmiyor.
Varsayılan bir değer bildirdiğinizde veya lambda ifadesi parametresiyle params yapılandırıcıyı eklediğinizde, temsilci türü Func veya Action türlerinden biri değildir. Bunun yerine, varsayılan parametre değerini veya params değiştiriciyi içeren özel bir tür. Aşağıdaki kod, bir türe varsayılan parametresi Action olan bir lambda ifadesi atadığından uyarılar oluşturur:
Action<int> a1 = (int i = 2) => { };
Action<string[]> a3 = (params string[] s) => { };
Hatayı düzeltmek için varsayılan parametreyi kaldırın veya temsilci türü için örtük olarak yazılan bir değişken kullanın:
Action<int> a1 = (int i) => { };
var a2 = (int i = 2) => { };
Action<string[]> a3 = (string[] s) => { };
var a4 = (params string[] s) => { };