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.
Başka bir yönteme kısa bir işlem geçirmek istediğinizde ve işlem, onu kullanan çağrının yanında en anlaşılır olduğunda bir lambda ifadesi seçin. Satır içi kural, okuyuculara öğeleri nasıl seçtiğinizi veya dönüştürdüğünüzü gösterir; adlandırılmış yöntem, ayrıntılarını incelemeden önce işlemin amacını anlamalarını sağlar.
Tip
Bu makale, C# yöntemlerini ve koleksiyonlarını bilen geliştiriciler için pratik seçenekleri anlatır. Tam lambda söz dizimi ve kuralları için bkz. lambda ifadeleri başvurusu.
Lambda ifadesi, başka bir kod parçasının davranışa ihtiyaç duyduğu yere yazdığınız adsız bir işlevdir.
Aşağıdaki lambda bir oturumu kabul eder ve oturumun açık koltukları olup olmadığını döndürür:
session => session.Registered < session.Capacity
=> işleci, soldaki parametreleri sağdaki gövdeden ayırır. "Böyle gider" şeklinde okuyun.
Davranışı bir yönteme aktarma
Çoğu .NET API'si, belirli bir parametre listesi ve dönüş türüyle davranışı temsil eden bir tür olan bir delegate'i kabul eder. Bir lambda bu davranışı sağlar.
Action ve Func gibi temsilci türlerine giriş için bkz. Lambda ifadeleri, temsilciler ve olaylar.
Aşağıdaki örnek, atölye oturumlarıyla birlikte çalışır. Bir WorkshopSession başlık, süre, kapasite ve kayıt sayısı içerir.
int maximumMinutes = 60;
var shortSessions = sessions
.Where(session => session.DurationMinutes <= maximumMinutes)
.OrderBy(session => session.Title);
foreach (WorkshopSession session in shortSessions)
{
Console.WriteLine(session.Title);
}
İlk lambda, hangi oturumların tutulacağını Where öğesine söyler. İkincisi, OrderBy hangi değere göre sıralama yapacağını söyler. Yöntemler, kurallardan herhangi birinin ayrıntılarını bilmeden davranış alır.
Parametre formu seçin
Anlaşılır kalan en kısa parametre formunu seçin:
session => session.DurationMinutes <= 60
Bir parametre için, derleyici türü çıkarabildiğinde parantezleri atlayın. Parametresiz durumlarda boş parantez kullanın:
() => DateTime.Now
İki veya daha fazla parametre için parantez kullanın:
(left, right) => left + right
Genellikle lambdayı alan yöntem, derleyicinin parametre türlerini çıkarabilmesi için yeterli bilgi sağlar. Çıkarım yardıma ihtiyaç duyduğunda veya türlerin netliği artırdığında açık türler yazın:
(WorkshopSession session) => session.Title
Lambda ifadeleri başvurusu parametre değiştiricileri, öznitelikleri, varsayılan değerleri ve diğer özel formları kapsar.
İfade veya ifade gövdesi seçme
Sonuç tek bir ifadeyle hesaplandığında ifade lambda’sını kullanın:
session => session.Registered < session.Capacity
İşlem birden fazla ifadeye ihtiyaç duyduğunda statement lambda kullanın. Gövdeyi ayraç içine alın ve lambda bir değer döndürdüğünde return ifadesini ekleyin:
var descriptions = sessions.Select(session =>
{
int seatsLeft = session.Capacity - session.Registered;
string availability = seatsLeft > 0 ? $"{seatsLeft} seats left" : "full";
return $"{session.Title}: {availability}";
});
Console.WriteLine(string.Join(Environment.NewLine, descriptions));
Statement lambda ifadelerini kısa tutun. Gövdenin birkaç adıma ihtiyacı olduğunda veya aynı mantık birden çok kez göründüğünde, davranışa yerel bir işlev veya normal yöntemle açıklayıcı bir ad verin.
Çevredeki kapsamdaki değerleri yakalayın
Lambda, çevresindeki yöntemde bildirilen bir değişken kullanabilir. Bu kullanım yakalama olarak adlandırılır. İlk örnekte, seçim lambda ifadesi maximumMinutes’ı yakalar:
int maximumMinutes = 60;
var shortSessions = sessions.Where(
session => session.DurationMinutes <= maximumMinutes);
Yakalama, kısa bir kuralın yerel bağlamı kullanmasına yardımcı olur. Lambda, değerinin bir kopyasını değil değişkenin kendisini yakalar. Lambda çalışmadan önce değişken değişirse lambda geçerli değeri görür.
Gerekli bağlamın belirlenmesini kolaylaştırın. Bir lambdanın çevre durumuna ihtiyacı yoksa, yanlışlıkla yakalamayı önlemek ve bu bağımsızlığı okuyucular için görünür hale getirmek için static ekleyin:
var openSessions = sessions.Where(
static session => session.Registered < session.Capacity);
Statik lambda parametrelerini, bildirmiş olduğu değerleri, sabitleri ve statik üyeleri kullanabilir. Çevresindeki koddan yerel değişkenleri veya örnek durumunu kullanamaz.
Bir lambda, yöntem grubu veya yerel işlev seçin
Birkaç C# formu delegate parametresine davranış sağlayabilir:
- Çağrının yanında net bir şekilde okunan kısa bir davranış için lambda ifadesi kullanın.
- Mevcut bir yöntem gerekli imzaya sahip olduğunda ve adı davranışı açıkladığında bir yöntem grubu kullanın.
- İçeren üye, yeniden kullanılabilir adlandırılmış mantığa, özyinelemeye veya satır içi lambda için fazla büyük bir gövdeye ihtiyaç duyduğunda yerel bir işlev kullanın.
- Birden çok üyenin davranışa ihtiyacı olduğunda normal yöntem kullanın.
Yöntem grubu, bağımsız değişken listesi olmayan bir yöntem adıdır. Derleyici eşleşen yöntemi gerekli temsilci türüne dönüştürür:
var openSessions = sessions.Where(HasOpenSeats);
foreach (WorkshopSession session in openSessions)
{
Console.WriteLine($"Open: {session.Title}");
}
static bool HasOpenSeats(WorkshopSession session) =>
session.Registered < session.Capacity;
Where(HasOpenSeats), Where(session => HasOpenSeats(session)) ile aynı kuralı daha az kodla iletir. Yöntem adı, okuyuculara kuralın neyi test ettiğini bildirir; satır içi karşılaştırma, bu kuralı nasıl test ettiğini gösterir. Bir bağımsız değişken eklerken, işlemleri birleştirirken veya çağrıyı daha net hale getirirken lambda sarmalayıcısını tutun.
Ayrıntılı bir yerel karşılaştırma için bkz. Yerel işlevler.