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 ответа:
Осуществление
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.