Mono和Linq聚合方法。尝试将项目添加到新列表时出错

时间:2012-10-29 13:57:27

标签: c# linq list mono accumulate

为什么这段代码不起作用?

public static IList<float> CreateModifiedList(IList<float> list)
{
    IList<float> modifiedList= list.Aggregate(new List<float> (), (l, item) =>l.Add(++item));

    return modifiedList;
}

当我尝试使用Mono编译它时,我收到以下错误:

  

错误CS0029:无法隐式转换类型void' to System.Collections.Generic.List'

3 个答案:

答案 0 :(得分:1)

它不起作用,因为l.Add(++item)没有返回你的聚合(float列表) - 它返回void。第二个参数应该是Func<List<float>, float, List<float>>类型。将代码更改为返回聚合变量:

(l, item) => { l.Add(++item); return l; }

BTW 您正在做的事情可以通过这种方式实现:

IList<float> modifiedList = list.Select(item => ++item).ToList();

答案 1 :(得分:1)

更改

l.Add(++item)

{ l.Add(++item); return l; }

因为您需要在聚合的后面返回一个列表。

答案 2 :(得分:0)

根据IEnumerable.Aggregate的签名,第二个参数应为Func<TSource, TSource, TSource> - 在您的情况下为(float, float) => float。但List.Addvoid函数,并且不返回float。因此编译错误。