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

本文关键字:int CS0029 字符串 转换 类型 | 更新日期: 2023-09-27 18:25:26

我正在学习C#,方法是遵循Lynda的基本培训教程,并尝试对它们的示例进行一些更改。

我陷入了一个错误,在谷歌上找不到解决方案。

无法将类型"string"隐式转换为"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。编译器谈论的字符串在哪里?:)

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

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

你想要的是

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

在这种情况下,正确的解决方案是.

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();

您还可以尝试使用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();
}

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