2014-10-03 57 views
-6

我對我的方式通過以下從琳達的基本培訓教程,並試圖把他們的例子一些改變學習C#。無法隱式轉換類型「字符串」到「廉政」(CS0029)

我卡上,我找不到在谷歌的解決方案的錯誤。

無法隱式轉換類型 '字符串' 到 '廉政'(CS0029)

代碼:

namespace l2 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     { 
      int arg; 
      arg = Console.ReadLine(); 
      int result1; 

      result1 = formula(arg); 
      Console.WriteLine("the result is {0}",result1); 
      Console.ReadKey(); 
     } 
     static int formula (int theVal){ 
      return (theVal * 2 + 15); 
     } 
     } 
    } 

我真的不明白,爲什麼我得到這個錯誤。我的函數獲得一個int,我想從控制檯獲得的arg也是一個int。編譯器正在討論的字符串在哪裏? :)

+3

如果你只想**諮詢【官方MSDN文檔(http://msdn.microsoft.com/en-us/library/system.console.readline%28v=vs.110%29.aspx)上'Console.ReadLine' **,你會看到它返回一個** **字符串(不是'int').... – 2014-10-03 18:26:23

+1

@marc_s,這是正確的。對不起,不會再發生。 – SilenceIsGolden 2014-10-03 18:30:52

回答

9

Console.ReadLine()返回一個字符串。

你想要的是

arg = int.Parse(Console.ReadLine()); 
+1

爲了擴展這個......也無所謂什麼是控制檯,它總是會被解讀爲一個字符串。你必須從那裏轉換它。 – guildsbounty 2014-10-03 18:26:46

+0

你說得對,但是爲什麼? arg = Console.ReadLine();'是默認的字符串嗎? – SilenceIsGolden 2014-10-03 18:28:51

+0

@guildsbounty,明白了。謝謝。 – SilenceIsGolden 2014-10-03 18:29:53

0

在這種情況下,正確的解決方案將是。

string input; 
       input= Console.ReadLine(); 
       int numberArg; 
       while (!int.TryParse(input, out numberArg)) 
       { 
        Console.WriteLine(@"Wrong parameter. Type again."); 
        input= Console.ReadLine(); 
       } 

       var result1 = formula(numberArg); 
       Console.WriteLine("the result is {0}", result1); 
       Console.ReadKey(); 
0

你也可以嘗試一些微妙的驗證,通過使用int.TryParse。這會嘗試將值轉換爲整數,如果它真的失敗,將使用原始值:

int id = 1; 
int.TryParse("Hello", out id); 
Console.WriteLine(id) 

輸出:1

int id = 1; 
int.TryParse("40", out id); 
Console.WriteLine(id) 

輸出:40

另請注意,Console.ReadLine()將返回一個類型string。所以要正確地解決你的問題,你應該這樣做:

int arguement = 0; 
while(!int.TryParse(Console.ReadLine(), out arguement) 
{ 
    Console.WriteLine(@"Error, invalid integer."); 
    Console.ReadLine(); 
} 

因此,直到他們輸入一個有效的整數,他們將被困在循環中。

相關問題