2017-07-30 75 views
1

我有这个练习。我不知道问题出在哪里,但是我一直在收到错误 - 请问有人能帮我解决什么问题?无法从int转换为char错误c#

未处理的异常:System.InvalidCastException:无法强制类型为'System.String []'的对象键入'System.IConvertible'。
at System.Convert.ToInt32(Object value)
at exercise_4.Program.Main(String [] args)in D:\ Courses \ c#\ beginner \ visual studio \ section 6 exercise \ exercise 4 \ exercise 4 \ Program的.cs:行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]); 
     } 
     } 
    } 
    } 
} 

感谢您的回答。

+3

Split将返回数组。您不能将数组转换为num。您可能需要将每个数字转换为int。 – Kajal

+2

Split返回一个字符串数组,即value是一个数组,是一个字符串数组。 ToInt32在这里需要一个字符串(或者一般来说任何实现IConvertible接口的类型),这是行不通的。您需要循环查看价值,转换每个条目并将其添加到您的数字列表中。 – ckuri

回答

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)); 
      } 
     } 
+0

所以如果我理解正确:方法int.TryParse转换值从字符串到int?而实际上,我得到的逻辑正确吗? – Comp

+0

是的,阅读有关int.TryParse在这里:https://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx我已修改答案打印列表中的前三个数字。 – ashin

2

您可以替换这样的:

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

这样:

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

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

相关问题