Вопрос по vb.net – Почему Integer.TryParse обнуляет результат при сбое?

3

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

У меня есть целое число со значением по умолчанию -1, которое я хотел бы оставить на -1, если анализ не удается. Однако функция Integer.TryParse () при неудачном разборе изменяет это значение по умолчанию на ноль.

Dim defaultValue As Integer = -1
Dim parseSuccess As Boolean = Integer.TryParse("", defaultValue)
Debug.Print("defaultValue {0}", defaultValue)
Debug.Print("parseSuccess {0}", parseSuccess)

Я ожидаю, что приведенный выше фрагмент кода должен вывести:

defaultValue -1
parseSuccess False

Однако вместо этого он выводит:

defaultValue 0
parseSuccess False

Правильно ли мое понимание?

Ваш Ответ

2   ответа
3

Вы правы, TryParse использует 0 в случае сбоя. (MSDN говорит это довольно четко) Но вы можете проверить paseSuccess и вернуть значение по умолчанию, если это то, что вы хотите.

20

Этоout параметр, который означает, что этоmust быть установленным методом (если он не генерирует исключение) - метод не может видеть, каково было исходное значение.

Альтернативой было бы сделать егоref параметр и установить его только в случае успеха, но это будет означать, что вызывающие абоненты должны сначала инициализировать переменную, даже если ониdidn't хочу такое поведение.

Вы можете написать свой собственный метод утилиты, хотя:

public bool TryParseInt32(string text, ref int value)
{
    int tmp;
    if (int.TryParse(text, out tmp))
    {
        value = tmp;
        return true;
    }
    else
    {
        return false; // Leave "value" as it was
    }
}

Похожие вопросы