Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我不能在聚合方法中将“string”转换为“int”?_C#_.net - Fatal编程技术网

C# 为什么我不能在聚合方法中将“string”转换为“int”?

C# 为什么我不能在聚合方法中将“string”转换为“int”?,c#,.net,C#,.net,为什么这样不行?我真的搞不懂。 实际上.Aggregate方法在序列上应用累加器函数。在本例中,您正在处理字符串列表,因此必须通过迭代获得字符串。ToString方法将帮助您在添加后进行转换。根据文档,您必须进行以下更改才能使代码正常工作 string _output = test.Aggregate((x,y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString()); 签出示例聚合函数定义为: public static TSo

为什么这样不行?我真的搞不懂。

实际上.Aggregate方法在序列上应用累加器函数。在本例中,您正在处理字符串列表,因此必须通过迭代获得字符串。ToString方法将帮助您在添加后进行转换。根据文档,您必须进行以下更改才能使代码正常工作

string _output = test.Aggregate((x,y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString());

签出示例

聚合函数定义为:

public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, TSource, TSource> func)
EDIT2:返回一个带有值之和的INT32

C


您需要在求和之后转换int。作为聚合函数应用于每个连续元素

var _output = test.Aggregate((x, y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString());

聚合函数返回的类型必须与放入聚合中的类型相同。看

您将一个IEnumerable输入到该方法中,因此它希望它作为输出。您正在转换为int返回类型,我相信它将从聚合器返回int。因为聚合函数需要字符串输出,所以您可能没有使用正确的LINQ类型


我建议。选择转换,然后。聚合以将它们添加到一起。

这是您需要执行的操作:

        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);

        }
说明:


聚合函数返回的数据类型与调用它的数据类型相同。因此,如果在字符串类型数组中调用它,它将返回一个字符串。但在你的例子中,你希望它是一个整数。因此,需要将字符串数组转换为整数数组。然后,您可以使用聚合函数返回整数值。

此错误的原因是没有从字符串到int的显式转换器。您需要使用int.Parse或int.TryParse进行此转换。你的问题是
在intx和inty中,除此之外,聚合方法在您的情况下不返回int。

您正在尝试将聚合值分配给一个字符串输出?你到底想做什么?\你的输出不是整数类型你能把你的问题作为代码而不是图片发布吗?因此,也许搜索爬虫可以索引它…只是更改了它,仍然给我带来问题。编译器说什么?我在更新中没有发现任何相似之处,我的帖子再次没有回答预期的int输出。不知道这有什么帮助?而且,这永远不会起作用。聚合必须返回一个字符串,因为测试是一个字符串列表。如果他想要返回一个int,这并不能回答问题。您是正确的,因为测试是字符串,所以它必须聚合回字符串。他只需要对“test”进行转换,使其首先是一个整数列表。因此,聚合函数的结果将是一个字符串,这意味着您在聚合中使用的lambda函数必须返回一个字符串。在您的情况下,Convert.ToInt32返回一个使所有内容都有意义的Int32。我现在明白错误了,谢谢!不用担心@CarsonthePowers。如果您对它满意,您可以标记为答案:这就是我要做的,除了像var output=test.Selects=>Convert.ToInt32s.Aggregatex,y=>x+y@KeithNicholas我也会这样做,但我在这里使类型可见,而不是使用“var”,因为在这里,类型对于演示问题的解决方案非常重要:@KeithNicholas Oh!伙计,我在重构的时候忘了删除它。那真的没有必要。谢谢更新答案:
var _output = test.Aggregate((x, y) => (Convert.ToInt32(x) + Convert.ToInt32(y)).ToString());
        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);

        }