我是LINQ的新手.我正在看这段代码,不确定我是否理解这一点.我意识到它是一个扩展和泛型方法,但正在predicate(item, index)执行什么(假设我在调用此方法时传入一个int数组)?
我知道谓词是一个委托,但也许我只是不知道委托如何运作,有人有任何他们想要给出的好的例子/解释.另外,什么是yield关键字,它只是用于linq的东西?
private static IEnumerable<TSource> WhereImpl<TSource>(
this IEnumerable<TSource> source,
Func<TSource, int, bool> predicate)
{
int index = 0;
foreach (TSource item in source)
{
if (predicate(item, index))
{
yield return item;
}
index++;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图跟随Reimplementing LINQ to Objects:第2部分 -来自Skeet博客的"Where".
predicate(item, index)
Run Code Online (Sandbox Code Playgroud)
被定义为类型
Func<TSource, int, bool>
Run Code Online (Sandbox Code Playgroud)
这意味着一个方法,其参数为TSource和,int并返回bool- 谓词.
TSource=的一个例子string可以(完全组成):
bool IsLengthLargerThan(string s, int length)
{
return s.Length > length;
}
Run Code Online (Sandbox Code Playgroud)
什么是yield关键字,它只用于linq的东西?
yield特定于迭代器块 - 这在LINQ之前就已存在.它基本上像状态机一样工作 - yield return item;将项目返回给调用者并暂停执行,但是一旦你请求下一个项目,执行将在下一行继续.如果您使用调试器逐步完成它,最简单的方法是查看它是如何工作的.