0

所以这一次,我将数字作为列表输入,每个数字用空格分隔。我现在编写的代码按应有的方式将数字放在一行中,但是当我尝试将字符串转换为 Int32 时失败,终止程序并且没有给我总和。我对错误的理解还不够好,无法准确解读错误是什么。一个人如何将拆分字符串数组转换为数字以产生总和?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Dynamic_Entry
    {
    class Program
     {
    static void Main()
    {
        Console.Write("Please provide a list of numbers, separated by spaces: ");
        string list = Console.ReadLine();
        string[] parts = list.Split(' ');
        int sum = 0;

        for (int i = 0; i < parts.Length ; i++)
        {
            Console.WriteLine("{0, 5}", parts[i]);

        }

        sum = Convert.ToInt32(list);
        Console.WriteLine("-----");
        Console.Write("{0, 5}", sum);
        Console.ReadLine();

        }
      }
    }
4

2 回答 2

5
for (int i = 0; i < parts.Length; i++)
{
    Console.WriteLine("{0, 5}", parts[i]);
    sum += Convert.ToInt32(parts[i]);
}

固定的。

您试图将 "1 2 3 4 5 55" 转换为int. 您必须将 "1"、"2、"3"... 转换为 anint并将它们添加到sum.

我会补充一点,如果你想拆分字符串,最好做类似的事情

string[] parts = list.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

通过这种方式,数字之间的多个空格被删除(例如 1 2 3)

Andrei 发布了一个非常简单的使用 LINQ 的示例......

int sum = parts.Sum(p => Convert.ToInt32(p));

这你会放在for循环之外。它转换int并添加所有“部分”。这意味着“对于每个part转换它int并添加它。返回总和”。

于 2013-08-02T07:22:36.860 回答
2

您可以将每个字符串转换为 int 并按照@xanatos 的建议将它们添加到循环中,或者您可以使用 LINQ 和Enumerable.Sum (),例如:

var sum=parts.Sum(part=>Convert.ToInt32(part));

或者

var sum=parts.Select(part=>Convert.ToInt32(part))
     .Sum();

当你有更复杂的表达式时,真正的好处就来了,例如。当您需要过滤值、提取属性等时。

例如,您可以像这样过滤大于 3 的值:

var sum=parts.Select(part=>Convert.ToInt32(part))
     .Where(num=>num>3)
     .Sum();
于 2013-08-02T07:34:22.187 回答