聚合函数问题

时间:2010-12-07 13:01:37

标签: linq aggregate

    List<MyClass> SampleList = new List<MyClass>() { new MyClass(), new MyClass(), new MyClass() };
    string AggCount = SampleList.Aggregate((counter, next) => counter.f_ToString() += next.f_ToString());
}

}

internal class MyClass
{
    public string f_ToString()
    {
        Random rnd = new Random();
        return rnd.Next(1000).ToString();
    }
}

alt text

3 个答案:

答案 0 :(得分:2)

看起来你有一个名为MyClass的{​​{1}}列表,对于它上面的每个项目,你想要调用SampleList,并创建一个字符串。你真的不需要f_ToString,尝试(在.Net 4.0上):

Aggregate

在.Net 3.5上,Concat需要一个数组,因此它将是:

string agg = String.Concat(SampleList.Select(myClass => myClass.f_ToString()));

如果您仍然想使用Aggregate,虽然这里没有充分的理由,但应该写成:

string agg = String.Concat(
   SampleList.Select(myClass => myClass.f_ToString()).ToArray()
   );

请注意,此处string agg = SampleList.Aggregate("", (counter, next) => counter + next.f_ToString()); 是一个字符串,因此您无法在其上调用counter

最后请注意,我热烈建议您为变量选择更好的名称。

答案 1 :(得分:1)

您尝试为方法f_ToString()分配值。将 + = 替换为 +

int AggCount = SampleList.Aggregate((counter, next) => counter.f_ToString() + next.f_ToString());

答案 2 :(得分:1)

int AggCount = SampleList.Aggregate((counter, next) => counter.f_ToString() += next.f_ToString());

更改为

int AggCount = SampleList.Aggregate((counter, next) => counter.f_ToString() + next.f_ToString());

因为你使用assign运算符而不是concat string