无法从int转换为char错误c#

时间:2017-07-30 16:50:05

标签: c#

我有这个练习。我不知道问题是什么,但我一直在收到错误 - 有人可以帮我解决问题吗?

  

未处理的异常:System.InvalidCastException:无法转换类型为' System.String []'的对象键入' System.IConvertible'。
  在System.Convert.ToInt32(对象值)
  at exercise_4.Program.Main(String [] args)在D:\ Courses \ c#\ beginner \ visual studio \ section 6 exercise \ exercise 4 \ exercise 4 \ Program.cs:line 20

这是我的控制台中的内容

编写程序并要求用户提供逗号分隔数字列表(例如5,1,9,2,10)。如果列表为空或包含少于5个数字,则显示"无效列表"并要求用户重新尝试;否则,显示列表中的3个最小数字。

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

namespace exercise_4
{
  class Program
  {
    static void Main(string[] args)
    {
      while (true)
      {
        Console.WriteLine("write numbers seperated with coma");
        var numbers = new List<int>();
        var input = (Console.ReadLine());
        var value = input.Split(',');
        var conv =Convert.ToInt32(value);
        numbers.Add(conv);

        if (value.Length < 5)
        {
          Console.WriteLine("invalid list!! retry");
          continue;
        }
        else
        {
          numbers.Sort();
          Console.WriteLine(numbers[0] , numbers[1], numbers [2]);
        }
      }
    }
  }
}

感谢您的回答。

2 个答案:

答案 0 :(得分:2)

Split方法返回一个字符串数组。抛出异常是因为以下语句尝试将string []强制转换为int:

 var conv =Convert.ToInt32(value);

您应该按如下方式迭代并解析数组中的每个项目:

while (true)
        {
            Console.WriteLine("write numbers seperated with coma");
            List<int> numbers = new List<int>();
            var input = (Console.ReadLine());
            var values = input.Split(',');

            foreach (var value in values)
            {
                int number;

                // If the input can be parsed to int, add it to numbers list.
                if (int.TryParse(value, out number))
                {
                    numbers.Add(number);
                }
            }

            if (numbers.Count < 5)
            {
                Console.WriteLine("invalid list!! retry");
                continue;
            }
            else
            {
                numbers.Sort();
                numbers.Take(3)
                       .ToList()
                       .ForEach(number => Console.WriteLine(number));
            }
        }

答案 1 :(得分:2)

你可以替换它:

var values = input.Split(',');

到此:

var values = input.Split(',').Select(a => int.Parse(a)).OrderBy(a => a).Take(3);

它会给你三个最小的数字。