使用Func<>键入以指定/更改变量

时间:2011-06-24 11:28:45

标签: c# linq

我已经知道以下代码不起作用

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

我想知道的是,如果有其他方式(最好使用linq)获得上述行为而不使用诸如“for”或“foreach”之类的循环语句。

感谢。

4 个答案:

答案 0 :(得分:7)

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

acc,是累加器(到目前为止我们已经进行了聚合/组合),接下来是枚举的下一个元素。所以,在这里我采取我们到目前为止所做的(最初是一个空字符串),并返回附加了下一个元素的字符串。

答案 1 :(得分:2)

如果你只使用字符串,那就更容易了。

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

答案 2 :(得分:1)

使用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);

答案 3 :(得分:0)

字面答案:

string s = "";
Func<string, string> myFunc = x =>
{
  s += x;
  return x;
};

IEnumerable<string> query = source.Select(myFunc); //note, deferred - s not yet modified.