我已经知道以下代码不起作用
string s = "";
someEnumerable.Select(x => s+= x);
我想知道的是,如果有其他方式(最好使用linq)获得上述行为而不使用诸如“for”或“foreach”之类的循环语句。
感谢。
答案 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.