答案 0 :(得分:5)
聚合函数定义为:
public static TSource Aggregate<TSource>(
this IEnumerable<TSource> source,
Func<TSource, TSource, TSource> func)
(文件here)
请注意您使用string[]
IEnumerable<string>
,TSource
将成为string
因此,聚合函数的结果将是string
,这意味着您在Aggregate
中使用的lambda函数必须返回string
。在您的情况下,Convert.ToInt32
会返回Int32
知道你使用聚合的原因会很有趣。它不会让您知道聚合函数的作用(您可以参考上面的链接),或者您不确定如何处理提供给函数的参数。
编辑:原始SS代码更改
所以,要解决&#34;新问题&#34;:
<强> C#强>
var test = new []{"0", "0", "0"};
var output = test.Aggregate((x, y) => $"{Convert.ToInt32(x) + Convert.ToInt32(y)}");
EDIT2:使用值的总和返回INT32
<强> C#强>
var test = new []{"1", "3", "2"};
var output = test.Sum(t => Convert.ToInt32(t));
答案 1 :(得分:1)
实际上.Aggregate()
方法在序列上应用累加器函数。在您的情况下,您正在处理字符串列表,因此您必须通过迭代获取字符串。方法.ToString()
将帮助您在添加后进行转换。根据{{3}}文档,您必须进行以下更改才能使代码正常工作
string _output = test.Aggregate((x,y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString());
查看示例MSDN
答案 2 :(得分:1)
这是你需要做的:
static void Main(string[] args)
{
string[] test = {"0", "1", "2", "3"};
int output = test.Select(s => Convert.ToInt32(s)).Aggregate((x, y) => x + y);
Console.WriteLine(output);
}
<强>解释强>
聚合函数返回您调用它的相同类型的数据。因此,如果您在字符串类型数组上调用它,它将返回字符串。但在您的情况下,您希望它是整数。因此,您需要将字符串数组转换为整数数组。然后,您可以使用Aggregate函数返回整数值。
答案 3 :(得分:0)
你需要在总和之后转换int。聚合函数适用于每个连续元素。
var _output = test.Aggregate((x, y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString());
答案 4 :(得分:0)
您的聚合函数必须返回与聚合内容相同的类型。见MSDN
您将./asadmin version
输入到该方法中,因此它希望将其作为输出。您正在转换为int返回类型,它会从我认为的聚合器返回int。由于聚合函数需要字符串输出,您可能没有使用正确的LINQ类型?
我建议.Select()进行转换,然后.Aggregate将它们加在一起。
答案 5 :(得分:0)
此错误的原因是没有从字符串到int的显式转换器,您需要使用int.Parse
或int.TryParse
进行此转换。你的问题是
在(int)x
和(int)y
中除了Aggregate()
方法在您的情况下不返回int。