正在将字符串转换为和C#

本文关键字:转换 字符串 | 更新日期: 2023-09-27 18:25:51

所以这一次,我将数字作为列表输入,每个数字之间用空格分隔。我现在编写的代码将数字放在一行中,但当我尝试将字符串转换为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();
        }
      }
    }

正在将字符串转换为和C#

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"…转换为int,并将它们添加到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并相加。返回总和"。

您可以将每个字符串转换为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();