为什么这段代码不起作用?
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'
答案 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.Add
是void
函数,并且不返回float
。因此编译错误。