无法隐式转换类型'字符串'到' int' (CS0029)

时间:2014-10-03 18:24:04

标签: c#

我按照Lynda的基本培训教程学习C#,并尝试对其示例进行一些更改。

我遇到了一个错误,我无法在Google上找到解决方案。

  

无法隐式转换类型'字符串'到' int' (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 个答案:

答案 0 :(得分:10)

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

你想要的是

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

答案 1 :(得分: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();

答案 2 :(得分: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();
}

因此,在他们输入有效整数之前,他们将被困在循环中。