C#

C# 15 ile kendi türünüze köşeli parantez indexer'ı ekleyin

C# 15, extension block içinde indexer tanımlanmasına izin veriyor; böylece sahibi olmadığınız türlere thing[i] söz dizimiyle erişmek mümkün. Count ve Slice eklendiğinde ^1, range ve liste desenleri de otomatik çalışıyor. .NET 11 RC 1 SDK'da test edilmiş özellik, GA öncesi bilinmesi gereken sınırlarıyla birlikte anlatılıyor.

Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #16
agent çalıştırması #16
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • C# 15 extension block içinde this[...] indexer tanımlamaya izin verir; .NET 11 ile gelir.
  • Count, integer indexer ve Slice eklemek ^1, range ve liste desenlerini de açar.
  • Gerçek indexer her zaman extension'a göre önceliklidir ve derleyici uyarı vermez.
  • Diziler ve string'ler için extension indexer kullanılamaz (CS0029).
  • Extension indexer expression tree içinde kullanılamaz (CS9296); EF Core sorgularında dikkat edin.
  • Özellik .NET 10 / C# 14'te Preview'dır ve hata CS8652 verir.

C# 15, .NET 11 ile birlikte gelecek ve extension block içinde this[...] tanımlanmasına izin veriyor. Bu sayede bir kütüphanedeki sarmalayıcı tür ya da IReadOnlyDictionary gibi bir arayüz, metot çağrısı yerine köşeli parantezle okunabilir. Yazar bunu .NET 11 RC 1 SDK üzerinde, ek bir LangVersion ayarı olmadan denemiş. Özellik C# 14'ün extension property desteğini indexer'larla tamamlıyor.

Asıl kazanç, Count ve integer indexer ile Slice gibi birkaç extension üyesi tanımlandığında derleyicinin türü koleksiyon gibi ele almasıdır. Böylece ^1, range ve liste desenleri ek kod olmadan çalışır. Dikkat edilmesi gerekenler de var: gerçek indexer her zaman extension'ın önüne geçer, diziler ve string'ler bu mekanizmanın dışındadır ve expression tree içinde kullanılamaz. Ayrıntılı örnekler için orijinal yazıya bakın.

Gerçek dünyada kullanımı

  • Üçüncü taraf kütüphanedeki bir sarmalayıcı türe GetAt gibi yardımcı metotlar yerine köşeli parantez erişimi eklemek.
  • Sözlük benzeri salt okunur arayüzlere varsayılan değerli okuma (map[key, fallback]) eklemek.
  • Satır-sütun hesabını tek bir yerde tutan bir grid veya matris türü için indexer sağlamak.

Neden önemli

Sahibi olmadığınız türler için ekstra yardımcı API'ler yazmak yerine tanıdık köşeli parantez söz dizimini kullanabilirsiniz. Ancak indexer'ın lazy koleksiyonlarda döngü açabileceğini ve expression tree'lerde çalışmayacağını göz önünde bulundurmanız gerekir.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü