C # Catch Exception - PullRequest
       2

C # Catch Exception

5 голосов
/ 13 июля 2011

Какое исключение я бы использовал при попытке / уловке, чтобы узнать, когда пользователь ввел данные в неправильном формате?

Пример:

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

Спасибо

Ответы [ 4 ]

25 голосов
/ 13 июля 2011

Не делай этого. Это неправильное использование обработки исключений. То, что вы пытаетесь сделать, считается кодированием по исключению , которое является анти-паттерном .

Исключением является именно то, на что это похоже, исключением от нормы. Это определяется тем, что вы либо не учли, либо просто не можете объяснить с помощью традиционной проверки. В этой ситуации вы можете определенно учитывать проблему формата заранее. Если вы знаете, что существует вероятность того, что введенные данные будут в неправильном формате, сначала проверьте этот случай. например,

if(!ValidateText(textBox1.text)) // Fake validation method, you'd create.
{
  // The input is wrong.
}
else
{
  // Normally process.
}
10 голосов
/ 13 июля 2011

Вы должны избегать использования Исключений в качестве управления потоком.

Если вы хотите, чтобы текстовое поле было целым, вот где int.TryParse () пригодится метод

int userInt;
if(!TryParse(textBox1.Text, out userInt)
{
    MessageBox.Show("Input in wrong format");
}
2 голосов
/ 13 июля 2011

Вы можете перейти с Exception ex, чтобы перехватить все исключения. Если вы хотите поймать более конкретную, вам нужно будет просмотреть документацию для любых функций, которые вы используете, чтобы проверить правильность ввода. Например, если вы используете int.TryParse(), то вы захотите поймать FormatException среди других (для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx).

1 голос
/ 13 июля 2011

Вы можете создать свое собственное исключение, например ↓

public class FormatException : Exception

И в вашем источнике это может быть ...

if (not int) throw new FormatException ("this is a int");

Тогда, В вашем улове ...

catch(FormatException fex)
...