Aracılığıyla paylaş


Deyimi ve yineleyici yöntemleriyle yield return ilgili hatalar ve uyarılar

deyimi ve yineleyici yöntemleriyle ilgili çok sayıda yield return vardır:

  • CS1622: Yineleyiciden değer döndürülemez. Bir değer döndürmek için yield return deyimini veya yinelemeyi sonlandırmak için verim sonu kullanın.
  • CS1624: 'tür' bir yineleyici arabirim türü olmadığından 'accessor' gövdesi yineleyici bloğu olamaz
  • CS1625: Finally yan tümcesinin gövdesinde verim yapılamıyor
  • CS1626: Catch yan tümcesine sahip bir try bloğunun gövdesinde bir değer verilemez
  • CS1627: Verim dönüşü sonrasında beklenen ifade
  • CS1629: Güvenli olmayan kod yineleyicilerde görünmeyebilir
  • CS1631: Catch yan tümcesinin gövdesinde bir değer verilemez
  • CS1637: Yineleyicilerin güvenli olmayan parametreleri veya verim türleri olamaz
  • CS4013: Türün örneği iç içe bir işlev, sorgu ifadesi, yineleyici bloğu veya zaman uyumsuz yöntem içinde kullanılamaz
  • CS8154: Gövde, başvuruyla döndürdüğünden yineleyici bloğu olamaz
  • CS8176: Yineleyicilerde başvuruya göre yerel ayarlar bulunamaz
  • CS9238: 'güvenli olmayan' bir blokta 'verim getirisi' kullanılamaz
  • CS9239: & işleç, yineleyici yöntemlerindeki parametrelerde veya yerel değişkenlerde kullanılamaz.

Yineleyici yönteminin yapısı

Yineleyici yöntemi C# dilindeki birkaç kurala uygun olmalıdır. Yineleyici yönteminiz bu kurallardan birini veya daha fazlasını ihlal ettiğinde derleyici aşağıdaki hataları gösterir:

  • CS1622: Yineleyiciden değer döndürülemez. Bir değer döndürmek için yield return deyimini veya yinelemeyi sonlandırmak için verim sonu kullanın.
  • CS1624: 'tür' bir yineleyici arabirim türü olmadığından 'accessor' gövdesi yineleyici bloğu olamaz
  • CS1627: Verim dönüşü sonrasında beklenen ifade
  • CS1637: Yineleyicilerin güvenli olmayan parametreleri veya verim türleri olamaz
  • CS8154: Gövde, başvuruyla döndürdüğünden yineleyici bloğu olamaz

Yineleyici yönteminizin aşağıdaki kurallara uyması gerekir:

  • Yineleyici yöntemi ( yield return ve isteğe bağlı olarak yield break) bir dizi döndürmek için deyimini return de kullanamaz.
  • Yineleyici yöntemi, bir yineleyici arabirim türünü dönüş türü olarak bildirmelidir. Yineleyici arabirim türleri şunlardır: IEnumerable, IEnumerable<T>, IEnumerator, . IEnumerator<T>
  • Deyim yield return , bir dizinin parçası olarak döndürülecek bir ifade içermelidir. yield return; geçerli değil.
  • Yineleyici yöntemi, işaretçiler gibi parametre olarak güvenli olmayan türleri kullanamaz.
  • Yineleyici yöntemi, işaretçiler gibi güvenli olmayan türlere sahip olamaz yield return .
  • Yineleyici yöntemi tarafından yield returnyapamazref. Değere göre döndürmelisiniz.

Yineleyici yöntemleriyle ilgili kısıtlamalar

Yineleyici yönteminin gövdesi, deyimi ve bağlamı yield return üzerindeki kısıtlamalara uygun olmalıdır. Yineleyiciniz bu kısıtlamalardan birini ihlal ettiğinde derleyici aşağıdaki hataları gösterir:

  • CS1625: Finally yan tümcesinin gövdesinde verim yapılamıyor
  • CS1626: Catch yan tümcesine sahip bir try bloğunun gövdesinde bir değer verilemez
  • CS1631: Catch yan tümcesinin gövdesinde bir değer verilemez
  • CS1629: Güvenli olmayan kod yineleyicilerde görünmeyebilir
  • CS9238: 'güvenli olmayan' bir blokta 'verim getirisi' kullanılamaz
  • CS9239: & işleç, yineleyici yöntemlerindeki parametrelerde veya yerel değişkenlerde kullanılamaz.

Bu hatalar, bir yineleyici bir öğe döndürdüğünden ve sonraki öğeyi oluşturmak için devam ettiğinden kodunuzun güvenlik kurallarını ihlal ettiğini gösterir:

  • Bir veya yield return yan tümcesinden catch yapamazsınızfinally.
  • Catch yan tümcesi olan bir yield return bloktan yapamazsınıztry.
  • Bir bloktan yield return yapamazsınızunsafe. Yineleyicinin bağlamı, kapsayan safe blok içinde iç içe unsafe bir blok oluşturur.
  • Yineleyici yöntemindeki & bir değişkenin adresini almak için işlecini kullanamazsınız.

C# 13'e geçmeden önce yineleyiciler kod içeremez unsafe (CS1629). C# 13'le başlayarak bu kısıtlama gevşetilir. Tüm yield return deyimlerin güvenli bir bağlamda olması gerekir, ancak yineleyici yöntemi kod içerebilir unsafe .

yineleyici yöntemlerinde başvuru güvenliği

Yineleyici yöntemlerin özel başvuru güvenliği kısıtlamaları vardır. Bu kurallar C# 13'te gevşetilir:

  • CS4013: Türün örneği iç içe bir işlev, sorgu ifadesi, yineleyici bloğu veya zaman uyumsuz yöntem içinde kullanılamaz
  • CS8176: Yineleyicilerde başvuruya göre yerel ayarlar bulunamaz

C# 13'e geçmeden önce yineleyiciler yerel değişkenleri bildiremedi ref . Bir türün değişkenlerini ref struct bildiremediler.

C# 13'den başlayarak, ref struct türler deyimler arasında yield return erişilmiyorsa yineleyici yöntemlerinde kullanılabilir. C# 13'le başlayarak yineleyici yöntemleri yerel değişkenleri bildirebilir ref .