Predicate<TObject>
Predicate<TObject>
görünürde tamamen sorumlu bir seçenek olduğu zaman API (özellikle .NET çerçevesinde) kullanan Func<TObject, bool>
kullandım. Bir API tasarımcısı neden iyi neden yapabilir?Func <TObject, bool> veya <TObject> Predicate?
cevap
, Func<T, bool>
Where
yüzden bunun gibi şeyler için kullanılır (bir yüklemi varsayarak istediğini) eleman yanı sıra indeksi alır diğer aşırı yük tutarlıdır:
IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate)
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate)
Şahsen ben yukarıdaki gibi hiçbir tutarlılık sorunu olduğu yerde öylesine
ben durumlarda kullanmak istiyorum, adı
Predicate
daha açıklayıcı olduğunu düşünüyorum. Dikkat edin, sadece
Action
ve
Func
delege türleri hakkında bilmeniz gereken bir şey var ...
LINQ geri kalanı ile tutarlılık?
("anomali" kaydedilmiştir, ancak anonim delege ve lamda fonksiyonları ile bu kadar farkın farkında olması gerekir neredeyse hiç fark etmez.)
Evet, ama LINQ bunu neden yaptı? –
Ayrıca LINQ geri kalanı ile "tutarlılık" iyi bir iyi neden olduğunu sanmıyorum. –
Jon'un bir ihtimal için cevabını görün. – Richard
Func <> delegeler "yenidir "yöntemlere lambdas/delege belirtme yolu". Ancak, sadece bir dizi delegeler var ve eğer aynı şeyi yapan daha spesifik bir temsilci varsa, bunun için gidin. Hep çok daha kendi kendini belgeleyen olduğu gibi Predicate <> için gitmek istiyorum sizin örnekte
LINQ yılında
Evet, korkarım cevap bundan daha iyi olmayacak. Saflık açısından bir çeşit kod bürokrasisi kazandı. (Örneğin, tutarlılık olmasına rağmen her zaman öntanımlı kullanılmalıdır). –