2010-12-29 2 views
22

я прочитал это из MSDN о Int32.TryParse()Int32.TryParse() возвращает ноль при неудаче - успех или сбой?

Когда этот метод возвращает, содержит 32-разрядное целое значение эквивалентного количеству содержащегося в сек, если преобразование удалось, или ноль, если преобразования не смогли.

Но что произойдет, если переданная строка сама является строковым представлением '0'. Таким образом, TryParse вернет ноль. Как я могу узнать, успешный или неудачный?

ответ

48

No, TryParseвозвращает true или false, чтобы указать успех. Значение параметра out используется для разобранного значения или 0 при сбое. Итак:

int value; 
if (Int32.TryParse(someText, out value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
} 

Так что, если вы передаете в «0», он будет выполнять первый блок, в то время как если вы передаете в «плохой номер» он будет выполнять второй блок.

+0

Гоша! Виноват. Я должен закрыть SO, пока я программирую. Слишком легко разместить здесь :). – NLV

+0

Вы упустили ')' в конце вашего if. – BoltClock

+0

@BoltClock: Исправлено, спасибо. –

5

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

Вот прототип Int32.TryParse() от documentation. Очень ясно, что он возвращает boolean. Второй параметр - out int, что означает, что аргумент передается по ссылке, поэтому он будет мутирован методом.

public static bool TryParse(
    string s, 
    out int result 
) 

Таким образом, чтобы проверить успех или неудачу, сделайте следующее:

int value; 

if (Int32.TryParse("0", out value)) 
    Console.WriteLine("Parsed as " + value); 
else 
    Console.WriteLine("Could not parse"); 
2

TryParse() возвращает логическое значение.

 Int32 testInt; 

     if (!Int32.TryParse("123", out testInt)) 
     { 
      MessageBox.Show("Is not a Int32!"); 
      return; // abbrechen 
     } 

     MessageBox.Show("The parst Int32-value is " + testInt); 
2

Метод Int32.TryParse() возвращает значение boolean как возврат и обеспечивает преобразованное значение в качестве выходного параметра. Таким образом, вы можете проверить значение boolean для статуса.

private static void TryToParse(string value) 
    { 
     int number; 
     bool result = Int32.TryParse(value, out number); 
     if (result) 
     { 
     Console.WriteLine("Converted '{0}' to {1}.", value, number);   
     } 
     else 
     { 
     if (value == null) value = ""; 
     Console.WriteLine("Attempted conversion of '{0}' failed.", value); 
     } 
    } 
0

с использованием C# 7 Теперь вы можете объявить переменную в TryParse как ...

if (Int32.TryParse(someText, out int value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
}