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 ifadelerinin ve anonim yöntemlerin bildirilmesi ve kullanılmasıyla ilgili çeşitli hatalar vardır:
- CS0407: 'method' yanlış dönüş türüne sahip.
- CS0428: 'Identifier' yöntem grubu temsilci olmayan 'type' türüne dönüştürülemiyor. Yöntemini çağırmayı amaçladınız mı?
- CS0748: Tutarsız lambda parametre kullanımı; parametre türlerinin tümü açık veya tamamen örtük olmalıdır.
- CS0815: Örtük olarak türü belirlenmiş bir değişkene 'ifade' atanamaz.
- CS0828: Anonim tür özelliğine 'ifade' atanamıyor.
- CS0837: 'is' veya 'as' işlecinin ilk işleneni lambda ifadesi, anonim yöntem veya yöntem grubu olmayabilir.
- CS1065: Varsayılan değerler bu bağlamda geçerli değildir.
- 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.
- CS1643: Tüm kod yolları anonim 'type' türünde bir değer döndürmez.
- CS1660: Lambda ifadesi bir temsilci türü olmadığından 'type' türüne dönüştürülemiyor.
- CS1661: Parametre türleri temsilci parametre türleriyle eşleşmediğinden anonim yöntem bloğu 'type' türüne dönüştürülemiyor.
- CS1662: Bloktaki bazı dönüş türleri temsilci dönüş türüne örtük olarak dönüştürülemediğinden anonim yöntem bloğu hedeflenen temsilci türüne dönüştürülemiyor.
- CS1673: Yapıların içindeki anonim yöntemler, lambda ifadeleri ve sorgu ifadeleri 'this' öğesinin örnek üyelerine erişemez.
- CS1676: 'number' parametresi 'anahtar sözcük' anahtar sözcüğüyle bildirilmelidir.
- CS1677: 'number' parametresi 'anahtar sözcük' anahtar sözcüğüyle bildirilmemelidir.
- CS1678: 'number' parametresi 'type1' türü olarak bildirilir ancak 'type2' olmalıdır.
- CS1686: Yerel değişken veya üyelerinin adresleri alınamaz ve anonim bir yöntem veya lambda ifadesi içinde kullanılamaz.
- CS1688: Bir veya daha fazla out parametresi olduğundan, parametre listesi olmayan anonim yöntem bloğu 'delegate' temsilci türüne dönüştürülemiyor.
- CS1706: İfade anonim yöntemler veya lambda ifadeleri içeremez.
- CS1731: Bloktaki dönüş türlerinden bazıları temsilci dönüş türüne örtük olarak dönüştürülemediğinden ifade temsilciye dönüştürülemiyor.
- CS1732: Beklenen parametre.
- CS1764: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde sabit yerel kullanılamaz.
- 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.
- CS8820: Statik anonim işlev 'değişken' başvurusu içeremez.
- CS8821: Statik anonim işlev 'this' veya 'base' başvurusu içeremez.
- CS8916: Lambda ifadelerindeki öznitelikler parantez içinde parametre listesi gerektirir.
- CS8917: Temsilci türü çıkarılamadı.
- CS8934: Dönüş türü temsilci dönüş türüyle eşleşmediğinden anonim yöntem 'type' türüne dönüştürülemiyor.
-
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 kullanma ile ilgili birkaç uyarı vardır:
- CS0467: 'method' yöntemi ile 'yöntem dışı' yöntemi arasındaki belirsizlik. Yöntem grubunu kullanma.
- CS1911: Anonim bir yöntemden, lambda ifadesinden, sorgu ifadesinden veya yineleyiciden bir 'base' anahtar sözcüğü aracılığıyla üyeye erişim doğrulanamaz kodla sonuçlanabilir.
- CS8971: InterpolatedStringHandlerArgument, lambda parametrelerine uygulandığında hiçbir etkiye sahip değildir ve çağrı sitesinde yoksayılır.
- CS8974: 'method' yöntem grubu temsilci olmayan 'type' türüne dönüştürülüyor. Yöntemini çağırmayı amaçladınız mı?
- 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ı
-
CS0837:
isveyaasişlecinin ilk işlemi lambda ifadesi, anonim yöntem veya yöntem grubu olamaz. -
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.
- CS1706: İfade anonim yöntemler veya lambda ifadeleri içeremez.
- CS1764: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde sabit yerel kullanılamaz.
- CS1911: Uyarı: Anonim bir yöntemden, lambda ifadesinden, sorgu ifadesinden veya yineleyiciden 'base' anahtar sözcüğü aracılığıyla üyeye erişim doğrulanamaz kodla sonuçlanabilir.
- CS8175: Anonim bir yöntem, lambda ifadesi veya sorgu ifadesi içinde yerel başvuru kullanılamaz.
- CS8820: Statik anonim işlev 'değişken' başvurusu içeremez.
- CS8821: Statik anonim işlev 'this' veya 'base' başvurusu içeremez.
- CS8971: Uyarı: InterpolatedStringHandlerArgument, lambda parametrelerine uygulandığında hiçbir etkiye sahip değildir ve çağrı sitesinde yoksayılır.
- CS9236: Bilgilendirici: Derleme, lambda ifadesinin en az belirli bir sayıda kez bağlanmasını gerektirir. Bunu sağlamak için 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.
Derleyici, lambda ifadeleri ve anonim yöntemler içinde belirli C# yapılarını yasaklar. Derleyici lambdaları ve anonim yöntemleri temsilci çağrılarına veya ifade ağaçlarına dönüştürdüğünden ve bazı yapılar bu formlarda temsil edilemediğinden bu kısıtlamalar vardır. Daha fazla bilgi için C# belirtiminin anonim işlev ifadeleri bölümüne bakın.
Aşağıdaki yönergeleri kullanarak bu hataları düzeltebilirsiniz:
- Lambda gövdesinden herhangi bir
yield returnveyayield breakdeyimini, kapsayan yineleyici yönteme taşıyın veya lambda'yıyielddeyimlerini destekleyen yerel bir işleve dönüştürün (CS1621). - Lambda gövdesi içindeki kapsayan yöntemden ,
inveyarefparametrelerine başvurmaktanoutkaçının. Lambda bu parametreleri kapatma işleminin bir parçası olarak yakaladığında, benzer parametrelerinrefbaşvuru semantiği korunamaz. Değeri yerel bir değişkene kopyalayın ve bunun yerine bu yerel değişkeni kullanın veya lambda'yı yerel bir işleve (CS1628) dönüştürün. - Denetimi lambda gövdesinden dışarı aktaran tüm
break,gotoveyacontinuedeyimlerini kaldırın. Denetim akışı deyimleri aynı lambda gövdesindeki (CS1632) etiketleri veya döngüleri hedeflemelidir. - Bir
structtüründe, lambda ifadesi, anonim yöntem veya sorgu ifadesi içindethisile örnek üyelerine başvurmaktan kaçının. Derleyici birthis'yistructiçinde değer olarak yakaladığından, lambda ifadesi içindeki mutasyonlar özgün örneği etkilemez. Gerekli üye değerlerini lambdadan önce yerel değişkenlere ayıklayın veya doğrudan erişebilenthisyerel bir işleve dönüştürün (CS1673). - Lambda'nın da yakaladığı yerel değişkenin adresini almayın. Derleyici, yakalanan değişkenleri yığınla ayrılmış bir kapatma nesnesine taşır ve adreslerini kararsız hale getirir. Adres alma mantığını lambdadan ayırın veya bunun yerine yerel bir işlev kullanın (CS1686).
- Lambda ifadesini veya anonim yöntemi, bunu engelleyen içeren ifadenin dışına taşıyın. Öznitelik oluşturucuları gibi bazı ifadeler, bağımsız değişken olarak lambda ifadelerini veya anonim yöntemleri desteklemez (CS1706).
- Lambda gövdesi içinde yerel değişken kullanmayın
fixed.fixeddeyiminin sabitleme garantisi, derleyicinin oluşturduğu kapanışa (CS1764) değil, yalnızca kapsayan alana uygulanır. - Lambda'nın içinde yerel bir değişken
refkullanmayın. Parametreler gibirefyereller derefderleyicinin lambda için oluşturduğu kapanışta yakalanamaz. Değeri yerel olmayanrefbir değişkene atayın veya lambda'yı yerel bir işleve (CS8175) dönüştürün. -
isveyaasişlecinin ilk işleneni olarak lambda ifadesi, anonim yöntem veya yöntem grubu kullanmayın. Bu yapıların çalışma zamanında test edilebilecek bir türü yoktur. önce ifadeyi bir değişkene atayın, ardından değişkeni test edin (CS0837). - Değiştiriciyi
staticlambdadan kaldırın veya yakalanan değişkene başvuruyu kaldırın. Lambdastatic, yerel değişkenlerin, parametrelerin yakalanmasını veyathisistenmeyen kapatma ayırmalarını önlemeyi açıkça yasaklar. Dış değişkenlere başvurmanız gerekiyorsa değiştiriciyistatickaldırın. Yığın ayırmayı en az düzeyde tutmak istiyorsanız, değerleri lambdaya parametre olarak geçirin (CS8820, CS8821). - InterpolatedStringHandlerArgumentAttribute öğesini lambda parametresinden kaldırın veya özniteliğin geçerli olduğu bir metoda taşıyın. Lambda çağrıları normal metot çağrılarıyla aynı interpolasyonlu dize işleyicisini kullanmadığından (CS8971), derleyici lambda parametrelerinde bu özniteliği yoksayar.
- Lambda veya anonim yöntem içinde
baseanahtarını kullanarak sanal bir üyeyi çağırmaktan kaçının. Derleyici, doğrulanamayan kod üreten bir yardımcı yöntemi aracılığıyla sanal olmayan bir çağrı oluşturur. Çağrıyı ayrı bir yönteme ayıklamayıbaseve bunun yerine lambda'dan bu yöntemi çağırmayı düşünün (CS1911). - Lambda ifadelerini kabul eden aşırı yüklenmiş yöntem çağrılarının karmaşıklığını azaltın veya açık tür bilgileri ekleyin. Derleyicinin aşırı yüklemeleri çözmek için bir lambda ifadesini birden çok kez bağlaması gerektiğinde, bu bilgilendirici tanıyı üretir. Lambda'yı açık parametre türleriyle bildirmek veya genel yöntem çağrısında açık tür bağımsız değişkenleri sağlamak, derleyicinin gerçekleştirmesi gereken bağlama geçişi sayısını azaltır (CS9236).
Lambda ifade parametreleri ve dönüşleri
- CS0748: Tutarsız lambda parametre kullanımı; parametre türlerinin tümü açık veya tamamen örtük olmalıdır.
- CS1065: Varsayılan değerler bu bağlamda geçerli değildir.
- CS1643: Tüm kod yolları anonim 'type' türünde bir değer döndürmez.
- CS1661: Parametre türleri temsilci parametre türleriyle eşleşmediğinden anonim yöntem bloğu 'type' türüne dönüştürülemiyor.
- CS1662: Bloktaki bazı dönüş türlerinin temsilci dönüş türüne örtük olarak dönüştürülemediği için anonim yöntem bloğu hedeflenen temsilci türüne dönüştürülemiyor.
- CS1676: 'number' parametresi 'anahtar sözcük' anahtar sözcüğüyle bildirilmelidir.
- CS1677: 'number' parametresi 'anahtar sözcük' anahtar sözcüğüyle bildirilmemelidir.
- CS1678: 'number' parametresi 'type1' türü olarak bildirilir ancak 'type2' olmalıdır.
- CS1688: Bir veya daha fazla out parametresi olduğundan, parametre listesi olmayan anonim yöntem bloğu 'delegate' temsilci türüne dönüştürülemiyor.
- CS1731: Bloktaki dönüş türlerinden bazıları temsilci dönüş türüne örtük olarak dönüştürülemediğinden ifade temsilciye dönüştürülemiyor.
- CS1732: Beklenen parametre.
- 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.
- CS8934: Dönüş türü temsilci dönüş türüyle eşleşmediğinden anonim yöntem 'type' türüne dönüştürülemiyor.
- CS8975: 'var' bağlamsal anahtar sözcüğü açık lambda dönüş türü olarak kullanılamaz.
- CS9098: Örtük olarak yazılan lambda parametresi '...' varsayılan değere sahip olamaz.
Bu hatalar lambda ifade parametresi veya dönüş türü bildirimiyle ilgili bir sorunu gösterir. Lambda parametresi ve dönüş türleriyle ilgili kuralların tamamı için C# belirtiminin lambda ifadeleri, anonim yöntemler ve anonim işlev ifadeleri bölümüne bakın.
Uyarı
CS1731 ve CS1732 artık C# derleyicisinin (Roslyn) geçerli sürümü tarafından üretilmemiştir. Daha eski bir derleyici sürümü kullanıyorsanız bunlar görünebilir.
Aşağıdaki yönergeleri kullanarak bu hataları düzeltebilirsiniz:
- Lambda ifadesindeki tüm parametrelerin aynı yazma stilini kullandığından emin olun. Bir lambda birden çok parametreye sahip olduğunda, her parametre açıkça yazılmalıdır veya örtük olarak yazılmalıdır; aynı parametre listesindeki (CS0748) iki stili karıştıramazsınız.
- Varsayılan değeri olan herhangi bir lambda parametresine açık türler ekleyin. Varsayılan değeri kodlayan özel bir temsilci türü oluşturması gerektiğinden, derleyici varsayılan değerleri içeren parametrelerde açık türler gerektirir. Örtük olarak yazılan parametreler, derleyicinin bu temsilci türünü (CS1065, CS9098) oluşturması için yeterli bilgi sağlamaz.
-
işleci kullanılarak
delegatebildirilen anonim yöntemlerden varsayılan parametre değerlerini kaldırın. Varsayılan parametre değerleri anonim yöntemlerde değil yalnızca lambda ifadelerinde desteklenir. Varsayılan değerlere (CS1065) ihtiyacınız varsa anonim yöntemi lambda ifadesine dönüştürün. - Lambda veya anonim yöntemin parametre türlerini,
ref/out/indeğiştiricilerini ve parametre sayısını hedef temsilci türüyle eşleştirin. Derleyici, anonim bir işlevi temsilciye dönüştürürken parametre imzalarının tam eşleşmesini gerçekleştirir: her parametrenin doğru türe sahip olması ve herhangi birref,outveyaindeğiştiricinin tam olarak temsilcinin beklediği zaman mevcut olması gerekir (CS1661, CS1676, CS1677, CS1678). - Hedef temsilci türünde
outparametreler olduğunda anonim yönteme parametre listesi ekleyin. Parametre listesi olmadan bildirilen anonim bir yöntem (söz dizimi kullanılarakdelegate { }) çoğu temsilci türüyle eşleşebilir, ancak derleyici gereklioutparametreleri örtük olarak sentezleyemez. Parametreleri temsilci imzasıyla (CS1688) eşleşecek şekilde açıkça bildirin. - Hedef temsilci türü geçersiz olmayan bir dönüş türüne sahip olduğunda lambda veya anonim yöntemdeki tüm kod yollarının bir değer döndürdiğinden emin olun. Gövdedeki her dal, temsilcinin dönüş türüne (CS1643, CS1662, CS1731, CS8934) örtük olarak dönüştürülebilen bir dönüş değeri üretmelidir.
- Lambda veya anonim bir yöntemden, değeri
void-dönüşlü bir temsilci türüne atanmış herhangi birreturnifadesini kaldırın. Temsilcinin dönüş türüvoidolduğundan, gövde değer döndüremez (CS8030). -
Öznitelikler herhangi bir lambda parametresine uygulandığında parametre listesini parantez içine alın. Derleyicinin öznitelik söz dizimini diğer ifadelerden ayırt etmek için ayraçlı forma ihtiyacı vardır. Örneğin, (
([MyAttribute] int x) => x) yerine[MyAttribute] x => xyazın. - Lambda ifadesinin
varaçık dönüş türü yerine belirli bir tür adı kullanın. anahtar sözcüğüvarörtük olarak yazılan yerel değişkenler için ayrılmıştır ve lambda dönüş türü ek açıklaması olarak kullanılamaz. Gerçek dönüş türünü belirtin veya dönüş türünü atlayın ve derleyicinin bunu çıkarmasına izin verin (CS8975). - Derleyicinin bunu geçerli bir parametre bildirimi olarak tanıyabilmesi için parametre listesini düzeltin. Bu hata, derleyicinin parametre tanımlayıcısı beklediği ancak başka bir şey bulduğu (CS1732) hatalı biçimlendirilmiş parametre listesini gösterir.
Lambda ifadesi temsilci türü
- CS0407: 'method' yanlış dönüş türüne sahip.
- CS0428: 'Identifier' yöntem grubu temsilci olmayan 'type' türüne dönüştürülemiyor. Yöntemini çağırmayı amaçladınız mı?
- CS0467: Uyarı: 'method' yöntemi ile 'yöntem dışı' yöntemi arasındaki belirsizlik. Yöntem grubunu kullanma.
- CS0815: Örtük olarak türü belirlenmiş bir değişkene 'ifade' atanamaz.
- CS0828: Anonim tür özelliğine 'ifade' atanamıyor.
- CS1660: Lambda ifadesi bir temsilci türü olmadığından 'type' türüne dönüştürülemiyor.
- CS8917: Temsilci türü çıkarılamadı.
- CS8974: Uyarı: Yöntem grubu 'method' temsilci olmayan 'type' türüne dönüştürülüyor. Yöntemini çağırmayı amaçladınız mı?
- CS9099: Uyarı: Varsayılan parametre değeri hedef temsilci türünde eşleşmiyor.
- CS9100: Uyarı: Parametrenin lambda'da params değiştiricisi var, ancak hedef temsilci türünde yok.
Bu hatalar, derleyicinin lambda ifadesi, anonim yöntem veya yöntem grubu için çıkarım yaptığı veya beklediği temsilci türüyle ilgili bir sorunu gösterir. Temsilci dönüştürmeleriyle ilgili kuralların tamamı için C# belirtiminin lambda ifadeleri, anonim yöntemler ve anonim işlev ifadeleri bölümüne bakın.
Uyarı
C# derleyicisinin (Roslyn) geçerli sürümü CS0467 üretmez. Daha eski bir derleyici sürümü kullanıyorsanız bu hatayı görebilirsiniz.
Aşağıdaki yönergeleri kullanarak bu hataları düzeltebilirsiniz:
- Atamanın veya dönüştürmenin hedef türünün bir temsilci türü veya System.Linq.Expressions.Expressionolduğundan emin olun. Lambda ifadesi veya anonim yöntem, veya arabirimi gibi
objecttemsilci olmayan bir türe atanamaz. Değişkenin türünüFunc<>veyaAction<>gibi uyumlu bir temsilci türüyle değiştirin ya da derleyicinin temsilci türünü çıkarmasına izin vermek içinvarkullanın (CS1660). - Lambda ifadesi için tek bir temsilci türünü belirlemek üzere derleyici için yeterli bağlam sağlayın. öğesine
varatandığında, derleyicinin belirsiz bir dönüş türüne ve parametre listesine ihtiyacı vardır. Anonim bir tür özelliğine atandığında, derleyici bir delege türünü hiç çıkaramaz. Lambda'yı açık bir temsilci türüne sahip bir değişkene atayın, ardından anonim tür başlatıcıda (CS0815, CS0828, CS8917) bu değişkeni kullanın. - Yöntem grubunun dönüş türünü temsilcinin bildirilen dönüş türüyle eşleştirin. Yöntem grubu dönüştürme, yöntemin dönüş türünün kimlik dönüştürülebilir veya örtük olarak temsilcinin dönüş türüne dönüştürülebilir olmasını gerektirir. Yöntemin dönüş türünü değiştirin veya temsilci türünü eşleşecek şekilde değiştirin (CS0407).
- Hedef tür temsilci olmadığında yöntem grubunu atamak yerine yöntemini çağırın. Hedef tür
string,intveya başka bir temsilci olmayan türse, büyük olasılıkla yöntemi çağırmayı ve sonucunu atamayı amaçlamışsınızdır. yöntemini çağırmak için parantezler ve bağımsız değişkenler ekleyin (CS0428, CS8974). - Metot ve aynı adı taşıyan metot dışı bir üye arasındaki belirsizliği çözün. Çakışan üyelerden birini yeniden adlandırın veya belirsizliği kaldırmak için tam niteleyici referans kullanın (CS0467).
- Hedef temsilci türü standart veya
paramstür olduğundaFunc<>veyaAction<>değiştiricisini kaldırın. Varsayılan değerler veparamsdeğiştiriciler, derleyicininFunc<>ileAction<>'ye eşleşmeyen özel tanımlı bir delege türü oluşturmasına neden olur. Derleyicinin doğru temsilci türünü sentezlemesine izin vermek için kullanınvarveya lambdanın bildirilen temsilci türüyle (params, CS9100) eşleşmesi için varsayılan değeri veya değiştiriciyi kaldırın.