我想專門瞭解爲什麼這裏有必要有這個API Where<TSource>
Enumerable.Where - 如何閱讀
什麼後直Where
告訴你的類型?
我明白了「這個」的概念,這意味着它的一個擴展方法但cannoth理解後凡
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
我想專門瞭解爲什麼這裏有必要有這個API Where<TSource>
Enumerable.Where - 如何閱讀
什麼後直Where
告訴你的類型?
我明白了「這個」的概念,這意味着它的一個擴展方法但cannoth理解後凡
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
Func<TSource, bool>
是一個指針,指向這需要TSource
作爲參數並返回布爾值的函數的類型。例如,如果你有以下功能:
public bool Foo(SomeType abc)
{
return abc.SomeProperty == "123";
}
,你可以把它作爲參數傳遞給Where方法,如果你有的SomeType
列表:
SomeType[] values = ...
var result = values.Where(Foo);
你也可以使用匿名函數可避免你需要明確地聲明另一個函數:
SomeType[] values = ...
var result = values.Where(x => x.SomeProperty == "123");
UPD ATE:
我似乎誤解了這個問題。函數名稱Where<TSource>
後面的類型表示generic function定義。它表明這個函數有一個可以是任何類型的泛型參數。因此,例如,當你寫:
SomeType[] values = ...
var result = values.Where(x => x.SomeProperty == "123");
TSource
等於SomeType
和編譯器能夠從委託自動推斷它。你可以明確指定,但它太寫作:
SomeType[] values = ...
IEnumerable<SomeType> result = values.Where<SomeType>(x => x.SomeProperty == "123");
我的問題不是關於參數或返回類型 - 我的問題是爲什麼你需要一個類型here'Where
@ChloeRadshaw,這是因爲它是一個通用的方法定義。 'TSource'表示泛型類型。 – 2011-03-05 16:40:28
什麼類型的輸入或輸出?而這不是params/return類型的類型? – 2011-03-05 16:41:32
一個簡單的回答你的問題將是類型安全和智能感知,而編程。 (泛型提供的所有優點)。
LINQ to Objects
適用於名爲Enumerable
的類型中定義的擴展方法。大多數情況下,他們處理類型IEnumerable<T>
。
因此,舉例來說,當你希望它在List<String>
運行,Where<TSource>
變得Where<String>
。和C#3.0類型的排除進入圖片,以便您不必明確指定String
部分。因爲編譯器知道你在使用IEnumerable<T>
。
要sumarrize,當您使用Where方法上的列表,所述方法預計的IEnumerable<String>
和Predicate
其需要String
對輸入序列篩選作爲輸入,並用IEnumerable<String>
作爲輸出提供。
<...>
的類型之後是通用類型參數的聲明。 Where
方法是通用的,這意味着在使用方法時可以提供其類型聲明中涉及的某些類型。在C#中,這被稱爲泛型。
<...>
是您聲明使用方法時調用者需要指定的類型的地方。這是,在某些方面,類似的參數
當使用參數的聲明,你說的調用者需要給你一些價值觀,你給他們的名字(例如source
和predicate
)。
當編寫泛型方法時,你說調用者需要給你一些類型,並給這個類型一個名稱(例如TSource
),你可以在方法聲明和正文中使用它。
也許你需要閱讀泛型? http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx – 2011-03-05 16:37:32