使用Func<>;键入以分配/更改变量

本文关键字:分配 改变 变量 lt Func gt 使用 | 更新日期: 2023-09-27 18:00:30

我已经知道下面的代码不适用于

string s = "";
someEnumerable.Select(x => s+= x);

我想知道的是,是否有其他方法(最好使用linq)可以在不使用循环语句(如"for"或"foreach")的情况下获得上述行为。

谢谢。

使用Func<>;键入以分配/更改变量

string s = someIEnumerable.Aggregate((acc, next) => acc + next);

acc是累加器(到目前为止我们已经聚合/组合了),next是枚举的下一个元素。因此,在这里,我获取到目前为止得到的内容(最初是一个空字符串),并返回附加了下一个元素的字符串。

如果您只处理字符串,则更简单。

var s = string.Join(string.Empty, someEnumerable)

使用Aggregate或编写自己的ForEach扩展方法:

    public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
    {
        foreach (T item in enumeration) { action(item); }
    }

然后做

   someEnumerable.ForEach(x => s += x);

文字答案:

string s = "";
Func<string, string> myFunc = x =>
{
  s += x;
  return x;
};
IEnumerable<string> query = source.Select(myFunc); //note, deferred - s not yet modified.