Почему Integer.TryParse устанавливает нулевой результат в случае сбоя?

Мое понимание функции 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

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


person Community    schedule 03.07.2009    source источник


Ответы (2)


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

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

Однако вы можете написать свой собственный служебный метод:

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
    }
}
person Community    schedule 03.07.2009

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

person Community    schedule 03.07.2009