SelectMany(x => x)的目的是什么?(涉及IT技术)

7

我理解lambda函数的用法,例如(x => x.Count() == 1)作为过滤器,但是(x => x)的目的是什么?当我把它去掉时,代码无法编译,我能找到的所有lambda函数示例似乎都使用它来在一行中过滤而不是多行。

List<Tuple<int, int>> regVals = ReadRegValCollection.SelectMany(x => x).ToList();

这个 gem 的目的是将一个列表中嵌套的列表扁平化为一个列表。

2
x => x 返回 x(也称为恒等函数),因此要在上下文中查看。SelectMany是做什么的? 这就是问题/答案 - 文档应该提供足够的信息。无论是 x => x 还是 x => f(x) 都没有关系。 - user2864740
也许你应该先熟悉 SelectMany() 方法... 然后再重新评估它是否令人困惑。 - Jeff Mercado
这相当于 Haskellconcat 函数... - Willem Van Onsem
@JeffMercado SelectMany() 返回一个扁平化的列表,那么 (x => x).ToList() 只是为了语法需要还是为了让数据类型匹配?我不太明白。 - SwimBikeRun
1个回答

18

x=>x 是一个lambda表达式,它返回任何提供的参数。

这与声明为以下方法等效:

public T Identity<T>(T item)
{
    return item;
}

它通常与SelectMany方法一起使用,将声明为IEnumerable<IEnumerable<T>>的集合展开为IEnumerable<T>

SelectMany需要匹配Func<IEnumerable<TSource>, IEnumerable<TResult>>的委托。如果源是IEnumerable<IEnumerable<T>>,并且您希望结果为IEnumerable<T>,则不必对源集合元素进行任何投影,因为它们已经是IEnumerable<TResult>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接