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 语句。它们被认为是不好的做法,在阅读您的问题时就像一道刺眼的红灯——这就是我所能关注的。
根据您的问题,int
或 Int32
不能为空。所以你不能将它与 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 语句中。
我目前正在开发一个程序,我正在通过错误处理来完成它。我有几个案例看起来像:
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 语句。它们被认为是不好的做法,在阅读您的问题时就像一道刺眼的红灯——这就是我所能关注的。
根据您的问题,int
或 Int32
不能为空。所以你不能将它与 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 语句中。