2009-04-18 69 views
8

我已經看到了一次又一次的API(特別是在.NET框架中),當Predicate<TObject>看起來是一個完美負責的選項時,它使用Func<TObject, bool>。什麼原因可能是一個API設計人員這樣做?Func <TObject,bool>或謂詞<TObject>?

回答

7

在LINQ,Func<T, bool>被用於諸如Where從而使其他重載這需要索引以及元素是一致的:

IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate) 
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate) 

我個人覺得這個名字Predicate是更具描述性的,所以那裏是像上面的不連貫問題,我會使用它的情況。請注意,只需要瞭解有關ActionFunc委託類型的內容就可以這麼說了...

2

與其他LINQ的一致性?

(該「異常」已經注意到,但有匿名委託和lambda功能,它沒有什麼區別,因此幾乎從來沒有需要注意的差異。)

+0

是的,但是爲什麼LINQ會這樣做? – 2009-04-18 09:21:13

+0

我也不認爲與LINQ其餘部分的「一致性」是的原因。 – 2009-04-18 09:21:53

0

的Func鍵<>代表是「新「指定lambda表達式/委託給方法的方式。然而,只有一組方便的代表,如果有一個更具體的代表做同樣的事情,那麼去那。

在您的例子我總是去作謂語<>,因爲它是更自我記錄(假設謂詞是你想要的)

相關問題