2009-07-03 1 views
3

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

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

ответ

20

Это 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 
    } 
} 
3

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

Смежные вопросы