TryParse () - почему этот код возвращает 0, а результат не должен быть -1?


См. следующий код:

string test = "";
int output = -1;

if (int.TryParse(test, out output))
{
    Console.WriteLine("Parsed");
}

Console.WriteLine(output);

Когда TryParse() терпит неудачу, не должен ли блок быть пропущен, Console.WriteLine("Parsed") не вызывается и значение output должно быть одинаковым (-1)?

Он возвращается 0

4 8

4 ответа:

Осуществление TryParse имеет по умолчанию параметр out перед возвратом, иначе он не будет компилироваться - несмотря ни на что о том, инициализировали ли вы параметр out с вызывающей стороны. Это относится к любому методу с параметрами out и не является специфичным для TryParse.

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

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

Использование неназначенного параметра out 'blah'

Если вы попытаетесь использовать значение параметра перед назначением ему внутри метода. Таким образом, вы можете гарантировать, что любое значение, которое вы назначаете и даете в качестве параметра out, будет проигнорировано / перезаписано.

Из MSDN:

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

В случае неудачи он будет return false и код в операторе if не будет выполнен.

В случае неудачи преобразования он также будет ретун 0 Вот почему output=0

В C#, out параметры должны быть назначены и не могут быть первоначально считаны. (При запуске метода параметры out обрабатываются как неинициализированные переменные.)

Таким образом, Предыдущее значение output не имеет значения. Он должен был быть перезаписан людьми, которые написали метод TryParse, иначе он не мог быть скомпилирован. В то же время метод TryParse не имеет доступа к предыдущему значению output. Поэтому нужно выбрать какую-то ценность. В этом деле, разработчики выбрали 0.