C# try and catch/错误处理

c# try and catch/ error handling

我目前正在开发一个程序,我正在通过错误处理来完成它。我有几个案例看起来像:

int stockbankInput = Convert.ToInt32(Console.ReadLine());

在这里,用户必须输入 1、2、3。如果有人输入 blankspace/string/character 或不是 1,2 或 3 的数字,我尝试使用 if 语句来捕获错误但它与字符串输入的意义不同。以下是我尝试过的:

if(stockbankInput == null)
{
    Console.WriteLine("Error: Please enter either 1, 2 or 3");
    stockbankInput = 0;
    goto menuRestartLine;
}

但是,您不能 link 'null' 输入整数,只能输入字符串。有人可以帮忙吗?

使用 Int32 TryParse 方法:

int input;
var successful = Int32.TryParse(Console.ReadLine(), out input);
if (!successful)
    // do something else
else
    return input;

试试这个示例程序:

static void Main(string[] args)
{
    int stockbankInput = 0;

    bool firstTry = true;
    while(stockbankInput < 1 | stockbankInput > 3)
    {
       if(!firstTry)
           Console.WriteLine("Error: Please enter either 1, 2 or 3");

       firstTry = false;
       Int32.TryParse(Console.ReadLine(), out stockbankInput);                
    }
}

首先,不要使用 goto 语句。它们被认为是不好的做法,在阅读您的问题时就像一道刺眼的红灯——这就是我所能关注的。

根据您的问题,intInt32 不能为空。所以你不能将它与 null 进行比较。给它一个默认值,然后检查它。

在这种情况下,您不需要检查错误,而只需要验证输入。使用 TryParse,如果解析成功,它将设置您的 out 参数,否则将其设置为 0.

接下来,您想循环直到获得正确的输入。 if语句执行一次,一个循环将保证当你离开它时,你的输入将是有效的。

最后,firstTry 是让用户在第一次尝试后知道他们搞砸了的好方法。

您正在检查 int 是否为 null,这将始终 return false 因为 int 不能为 null。

您可以使用 'int?' (Nullable int) 但 Convert.ToInt32 不会 return null。如果无法解析 int 的值,它将解析为默认值零。您可以检查 returned int 是否为零或进一步检查 returned 字符串:

int input = 0;

string errorMessage = "Error: Please enter either 1, 2 or 3";

while(true)
{
    try
    {
        input = Convert.ToInt32(Console.ReadLine());

        if (input == 0 || input > 3)
        {
            Console.WriteLine(errorMessage);
        }
        else
        {
            break;
        }
    }
    catch(FormatException)
    {
         Console.WriteLine(errorMessage);
    }
}

有了这个,你的 returned 值 "int input" 将是 0 或你输入的数字,并且将捕获由要转换的字符串包含除数字 0-9 以外的符号引起的 FormatExceptions在 try/catch 语句中。