C#捕获异常

C#捕获异常,c#,try-catch,C#,Try Catch,当用户以错误的格式输入数据时,我会在try/catch中使用哪种异常 例如: try { string s = textBox1.Text; // User inputs an int // Input error MessageBox.Show(s); } catch(what exception) { MessageBox.Show("Input in wrong format"); } 谢谢,不要这样做。这是对异常处理的滥用。您尝试执行的操作被视为

当用户以错误的格式输入数据时,我会在try/catch中使用哪种异常

例如:

try
{
    string s = textBox1.Text;
    // User inputs an int
    // Input error
    MessageBox.Show(s);
}
catch(what exception)
{
    MessageBox.Show("Input in wrong format");
}

谢谢,不要这样做。这是对异常处理的滥用。您尝试执行的操作被视为异常编码,这是一个错误

一个例外就是它听起来的样子,一个正常的例外。它是由一些你没有解释的东西定义的,或者仅仅是通过传统的验证无法解释的东西。在这种情况下,您肯定可以提前说明格式问题。如果您知道有可能输入的数据格式错误,请首先检查此情况。e、 g

if(!ValidateText(textBox1.text)) // Fake validation method, you'd create.
{
  // The input is wrong.
}
else
{
  // Normally process.
}

您可以使用
Exception ex
捕获所有异常。但是,如果您想捕获更具体的函数,则需要查看文档中用于检查输入有效性的函数。例如,如果您使用
int.TryParse()
,那么您将希望捕获
FormatException
(有关更多信息,请参阅:)

您可以创建自己的异常,如↓

public class FormatException : Exception
在你的资料中,它可能是

if (not int) throw new FormatException ("this is a int");
然后,在你的捕获

catch(FormatException fex)

您应该避免使用异常作为流控制

如果您希望文本框是int,这就是int.TryParse()方法的用武之地

int userInt;
if(!TryParse(textBox1.Text, out userInt)
{
    MessageBox.Show("Input in wrong format");
}

呃,我把注意力集中在wrt提出的问题上,以确定使用哪个异常。但我认为George的答案最终是更正确的,因为OP绝对不应该在这里使用异常。我看不出你发布的代码有任何异常。假设没有灾难性故障或类似的情况,此代码将始终按预期工作。如果无法验证输入,请不要为此使用异常。您可以使用Exception捕获所有异常类型。此代码不应失败,因此这是一个坏例子,但转换类型的一些常见异常是InvalidCastException、FormatException、ArgumentNullException和OverflowException,当然也有其他依赖于转换的因素。预期输入非常正常,当然也不例外。@Sogger:不,不太例外。用户无法捕获异常,所以当用户做了不正确的事情时抛出异常值是多少?这取决于应用程序是什么。输入不一定来自坐在计算机旁的用户,它可能来自外部数据库或其他来源。此外,除非您正在处理大量输入,否则if/else和try/catch与程序的实际用途之间的区别只是语义上的。我相信一个try{parse}比一个tryparse还要快;作语法分析在无错误的情况下,即使对于大容量处理也是如此。我发现自己使用trycatch的时候是在有多个输入验证的情况下,代码的可读性/可维护性比10多个ifelse块高得多。@Sogger。不做某件事总是有一个假设的理由——这里清楚地定义了OP试图完成的任务。相信一个应用程序会有多个输入或来自非用户源的输入是不可能的。我发表评论的唯一原因是因为你的答案是笼统的,我想向以后的读者指出,如果他们使用try-catch,他们不是坏人或“反”者。虽然从技术上讲是正确的,但这不是一个好的模式(见公认的答案)