Я недавно обнаружил, что следующее, кажется, работает просто отлично
int i = Int32.TryParse(SomeString, out i) ? i : -1;
Это работает, но это не хорошо.
Есть ли проблемы с объявлением переменной и использованием TryParse для ее инициализации в той же строке?
Да, удобочитаемость. Я думаю, что это выглядит ужасно, и это делает двойную работу.
Часть вашей проблемы в том, что вы хотите -1
в качестве значения по умолчанию. Int32.TryParse явно определяет 0
как выходное значение при сбое преобразования.
Я бы все равно разбил его на 2 строки для удобства чтения.
int i;
if (! int.TryParse(SomeString, out i)) i = -1;
А когда вам это нужно, напишите вспомогательный метод (статический, но не с расширением):
int i = Utils.ParseInt(SomeString, -1);