为什么我无法转换'字符串'到一个' int'在聚合方法里面?

时间:2017-05-02 04:27:24

标签: c# .net

为什么这不起作用?真的无法解决这个问题。 enter image description here

6 个答案:

答案 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.Parseint.TryParse进行此转换。你的问题是 在(int)x(int)y中除了Aggregate()方法在您的情况下不返回int。