Конечно, это могло быть реализовано как
int TryParse(string input, out bool succeeded)
{
}
Но, как упоминалось в комментарии, общий вариант использования функции:
string input;
int parsedValue;
if(int.TryParse(input, out parsedValue))
{
// use parsedValue here
}
С подписью, которую вы предлагаете , этот код теперь будет:
string input;
bool succeeded;
int parsedValue = int.TryParse(input, out succeeded)
if(succeeded)
{
// use parsedValue here
}
Таким образом, здесь больше кода без каких-либо функциональных преимуществ. Кроме того, с вашим тернарным оператором, если синтаксический анализ не удался, вы просто устанавливаете нулевое значение, что не нужно, поскольку его значение по умолчанию равно 0. Вы можете просто сделать:
int parsedValue;
int.TryParse(input, out parsedValue);
Если синтаксический анализ не удался, parsedValue
будет иметь значение 0; (Я также сомневаюсь, что / как вы различаете guish между фактическим результатом 0 и неудачным синтаксическим анализом, но я уверен, что у вас есть причина).
Итак нет технической причины, по которой подпись такая, какая есть; это дизайнерское решение, подходящее для наиболее распространенных случаев использования.
Конечно, теперь с кортежами в C# 7 вы могли бы иметь:
(int parsedValue, bool succeeded) = int.TryParse(input);
но опять же, это небольшое функциональное преимущество, и вы не можете встраивать TryParse
в оператор if
.