C# - неудавшееся исключение синтаксического анализа?

Я пишу программу в C#, и я хочу поймать исключения, вызванные путем преобразования "" (пустой указатель) в интервал. Каково имя исключения?

Править: Я не уверен, что могу показать здесь полный код... Но я уверен, что Вам не нужен полный код, таким образом:

        int num1 = Int32.Parse(number1.Text);
        int num2 = Int32.Parse(number2.Text);
12
задан Gilad Naaman 29 July 2010 в 20:47
поделиться

10 ответов

Если вы можете этого избежать, не создавайте код по исключениям!

Имя искомого исключения называется FormatException .

Однако было бы разумнее сначала выполнить TryParse на объекте, который вы пытаетесь проанализировать, например

int value;
if(!int.TryParse("1", out value))
{
    // You caught it without throwing an exception.
}
33
ответ дан 2 December 2019 в 02:55
поделиться

Вы получите FormatException, если разбор не удался. Почему бы вместо этого не использовать int.TryParse?

13
ответ дан 2 December 2019 в 02:55
поделиться

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

11
ответ дан 2 December 2019 в 02:55
поделиться

Давайте посмотрим на документацию (что является гораздо более чистым решением, чем "пробовать"):

public static int Parse(string s)

[...]

Исключения:

  • ArgumentNullException: s is null.
  • FormatException: s имеет неправильный формат.

Это должно ответить на ваш вопрос. Как уже говорили другие, возможно, вы задаете неправильный вопрос и хотите использовать Int32.TryParse вместо этого.

6
ответ дан 2 December 2019 в 02:55
поделиться

Когда возникает исключение, вы можете увидеть его тип. Разумнее всего обработать этот случай и, если возможно, отобразить изящное сообщение для вашего пользователя.

0
ответ дан 2 December 2019 в 02:55
поделиться

Исключения стоят дорого. Вы должны использовать int.TryParse. Он вернет булево значение false, если преобразование не удалось.

0
ответ дан 2 December 2019 в 02:55
поделиться

Convert.ToInt32 не генерирует исключение формата («входная строка имеет неправильный формат») для пустой строки. Вы можете использовать это, если допустимо, чтобы результат был 0 для нулевой строки. (по-прежнему рвет на пустую строку)

        string s = null;
        int i = Convert.ToInt32(s);

Но если вы ожидаете, что в поле будет число, вам следует либо использовать TryParse (как предлагалось), либо какой-либо валидатор, чтобы сообщить пользователю, что ему нужно ввести число .

0
ответ дан 2 December 2019 в 02:55
поделиться

Зависит от того, что вы используете для преобразования. Например, int.Parse вызовет ArgumentNullException , FormatException или OverflowException . Скорее всего, вы ищете ArgumentNullException , но если это пустая строка, а не пустая ссылка, это, вероятно, будет FormatException

1
ответ дан 2 December 2019 в 02:55
поделиться

Вы, вероятно, хотите получить System.InvalidCastException , хотя я думаю, что это будет зависеть от того, как вы попытаетесь выполнить преобразование.

Тем не менее, не будет ли проще / быстрее просто написать код и попробовать его самостоятельно? В частности, вы не указали , как вы будете выполнять преобразование.

0
ответ дан 2 December 2019 в 02:55
поделиться

Просто попробуйте. Этот код:

int.Parse("");

Выбрасывает исключение FormatException.

0
ответ дан 2 December 2019 в 02:55
поделиться