2017-07-30 439 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); 

它會給你三個最小的數字。