【发布时间】:2019-01-11 10:23:56
【问题描述】:
我正在做一个 C# 练习来创建一个操作,该操作接受一个集合,对集合中的每个对象执行一个函数,并返回一个已修改对象的集合。
我的代码目前如下:
public static IEnumerable<U> Accumulate<T, U>(this IEnumerable<T> collection, Func<T, U> func)
{
IEnumerable<U> output = Enumerable.Empty<U>();
foreach (T item in collection)
{
output.Append(func(item));
}
return output;
}
这只是返回一个空集合,我不知道为什么。
在另一个线程中看到这种方法后,我尝试在 foreach 中创建项目的副本,如下所示:
foreach (T item in collection)
{
U copy = func(item);
output.Append(copy);
}
但这并没有解决任何问题。
我做了一些研究,但实际上找不到任何示例完全符合我在此处尝试做的事情。我读了一些关于闭包的东西,但由于我是 C# 的新手,所以并不能真正理解它。
【问题讨论】:
-
请注意,这也可以在 Linq 中实现:
var output = collection.Select(x => SomeFunction(x)); -
追加不会修改你的收藏,它返回一个新的。顺便说一句,这适用于所有 LINQ 方法。
-
或更多缩写:
var output = collection.Select(SomeFunction); -
补充@HimBromBeere 所说的内容,如果您检查the docs,您可以看到
Append()返回具有最新附件的IEnumerable -
@maccettura 是的,我明白了 :)
标签: c# foreach append iteration