我按照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。编译器正在讨论的字符串在哪里? :)
答案 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();
}
因此,在他们输入有效整数之前,他们将被困在循环中。