2014-10-03 79 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(); 
} 

因此,直到他们输入一个有效的整数,他们将被困在循环中。

相关问题