93
Новая функция в C # 6.0 позволяет объявлять переменную внутри метода TryParse.
Выражения объявления были вырезаны из C # 6.0 и не поставлялись в окончательной версии. В настоящее время вы не можете этого сделать. Для этого есть предложение на GitHub для C # 7 (также см. Это для справок в будущем).
В официальном выпуске C # 7 компилируется следующий код:
string s = "42";
if (int.TryParse(s, out var result))
{
Console.WriteLine(result);
}
Выяснилось случайно, в vs2017 вы можете сделать это для краткости:
if (!Int64.TryParse(id, out _)) { // error or whatever... }
источник
Это новая функция C # 7, которая является очень хорошей функцией, часто используемой в сочетании с сопоставлением с образцом. Об этой и многих других функциях объявлено в блоге группы разработчиков C # Что нового в C # 7.0 .
Команда пытается добиться более гибкого кода. Вы помните случаи, когда список выходных переменных становился очень длинным и бесполезным? Просто быстрый пример:
int i; Guid g; DateTime d; if (int.TryParse(o, out i)) { /*use i*/ } else if (Guid.TryParse(o, out g)) { /*use g*/ } else if (DateTime.TryParse(o, out d)) { /*use d*/ }
Видите проблему? Бесполезно, чтобы все эти выходные переменные ничего не делали. Количество строк можно сократить вдвое с помощью C # 7:
if (int.TryParse(o, out int i)) { /*use i*/ } else if (Guid.TryParse(o, out Guid g)) { /*use g*/ } else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }
Сведено к минимуму не только количество строк, но и нет ненужного списка переменных в области видимости, где вы не хотите их иметь. Это не позволяет вам использовать переменную, которую вы не собирались использовать, но которая теперь вам видна.
Эта функция также полезна при сопоставлении с образцом в
switch
операторах, как в этом коде (который имеет другое поведение, чем приведенный выше код!):switch (o) { case int i: { /*use i*/ break; } case Guid g: { /*use g*/ break; } case DateTime d: { /*use d*/ break; } }
источник