为什么输入至少一次无效整数后a = 0的值

时间:2017-08-06 09:01:54

标签: c# tryparse

我正在尝试在c#中使用TryParse方法。 我正在创建一个从用户获取输入的程序,如果它是整数,则返回一个变量。当输入有效整数时,程序工作正常,但是一旦我输入无效数字12sd,它就会返回a=0。错误在哪里。

public int checkValidNumber()
{
    Program obj = new Program();
    int a = 0;
    string str = Console.ReadLine();
    if(!int.TryParse(str, out a))
    {
      Console.WriteLine("Please enter a valid number");
      obj.checkValidNumber();
    }
    return a;
}

使用

在Main中调用
Program obj = new Program();
int a = obj.checkValidNumber();

如果Program是一个类,请考虑一个控制台应用程序

1 个答案:

答案 0 :(得分:2)

您应该将obj.checkValidNumber();替换为:

a = obj.checkValidNumber();
//Or
return obj.checkValidNumber();

此外,checkValidNumberProgram的成员函数,没有理由在每次调用中创建Program的新实例

public int checkValidNumber()
{
    int a=0;
    if(!int.TryParse(Console.ReadLine(), out a))
    {
      Console.WriteLine("Please enter a valid number");
      return checkValidNumber();
    }
    return a;
}

但最好使用while循环,而不是递归调用:

public int checkValidNumber()
{
    int a=0;
    while(!int.TryParse(Console.ReadLine(), out a))
    {
      Console.WriteLine("Please enter a valid number");
    }
    return a;
}

如果使用C#7.0,请参阅TryParse的{​​{3}}