TryParse с вне var param
новая функция в C# 6.0 позволяет объявлять переменную внутри метода TryParse.
У меня есть код:
string s = "Hello";
if (int.TryParse(s, out var result))
{
}
но я получаю ошибки компиляции:

что я делаю не так?
P. S.: В настройках проекта C# 6.0 и .Чистая Framework 4.6 и устанавливаются.
3 ответов:
новая функция в C# 6.0 позволяет объявлять переменную внутри TryParse метод.
выражения объявления были вырезаны из C# 6.0 и не были отправлены в финальной версии. В настоящее время вы не можете этого сделать. есть предложение для него на GitHub для C# 7 (см. этой для дальнейшего использования).
обновление (07/03/2017)
с официальным выпуском 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# 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; } }
Comments