93
Nowa funkcja w C # 6.0 pozwala zadeklarować zmienną wewnątrz metody TryParse.
Wyrażenia deklaracji zostały wycięte z języka C # 6,0 i nie zostały wysłane w ostatecznej wersji. Obecnie nie możesz tego zrobić. Jest to propozycja dla niego na GitHub dla C # 7 (patrz również ten dla odniesienia w przyszłości).
Wraz z oficjalnym wydaniem C # 7 kompilowany jest następujący kod:
string s = "42";
if (int.TryParse(s, out var result))
{
Console.WriteLine(result);
}
Właśnie dowiedziałem się przypadkiem, w vs2017 możesz to zrobić dla zwięzłości:
if (!Int64.TryParse(id, out _)) { // error or whatever... }
źródło
To jest nowa funkcja z C # 7, która jest bardzo fajną funkcją często używaną w połączeniu z dopasowywaniem wzorców. Ta funkcja i wiele innych są ogłoszone w blogu zespołu języka C # Co nowego w języku C # 7.0 .
To, co zespół stara się osiągnąć, to bardziej płynny kod. Czy pamiętasz przypadki, w których lista naszych zmiennych staje się bardzo długa i nie nadaje się do użytku? Tylko krótki przykład:
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*/ }
Widzisz problem? Nie ma sensu, aby wszystkie te zmienne siedziały tam i nic nie robiły. Liczbę wierszy można zmniejszyć o połowę za pomocą 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*/ }
Nie tylko liczba linii jest zminimalizowana, ale także nie ma zbędnej listy zmiennych w zakresie, w których nie chcesz ich mieć. Uniemożliwia to użycie zmiennej, której nie zamierzałeś użyć, ale która jest teraz dla Ciebie widoczna.
Ta funkcja jest również przydatna przy dopasowywaniu wzorców w
switch
instrukcjach, jak w tym kodzie (który zachowuje się inaczej niż powyższy kod!):switch (o) { case int i: { /*use i*/ break; } case Guid g: { /*use g*/ break; } case DateTime d: { /*use d*/ break; } }
źródło