Відповіді:
Нова функція в 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; }
}