TryParse ohne var param


93

Eine neue Funktion in C # 6.0 ermöglicht das Deklarieren von Variablen innerhalb der TryParse-Methode. Ich habe einen Code:

string s = "Hello";

if (int.TryParse(s, out var result))
{

}

Aber ich erhalte Kompilierungsfehler: Geben Sie hier die Bildbeschreibung ein

Was mache ich falsch? PS: In den Projekteinstellungen sind C # 6.0 und .NET Framework 4.6 festgelegt.

Antworten:


152

Eine neue Funktion in C # 6.0 ermöglicht das Deklarieren von Variablen innerhalb der TryParse-Methode.

Deklarationsausdrücke wurden aus C # 6.0 herausgeschnitten und in der endgültigen Version nicht ausgeliefert. Das können Sie derzeit nicht. Es gibt einen Vorschlag dafür auf GitHub für C # 7 (siehe dies auch als zukünftige Referenz).

Update (07/03/2017)

Mit der offiziellen Veröffentlichung von C # 7 wird der folgende Code kompiliert:

string s = "42";

if (int.TryParse(s, out var result))
{
     Console.WriteLine(result);
}

4
Vielen Dank für Informationen! Es ist schade, dass es aus der endgültigen Veröffentlichung herausgeschnitten wurde, da es für mich eine nette Funktion ist.
Anton23

2
@ Anton23 Hoffen wir, dass es dann in C # 7 kommt :)
Yuval Itzchakov

2
Das war für mich das am meisten erwartete Feature.
Tuyen Pham

Zumindest in C # 7 / VS2017.
Schmied

1
Sie konnten buchstäblich keinen weiteren Satz mehr lesen? Die Antwort, in der C # 7 angegeben ist, erklärt auch, dass es von 6.0 abgeschnitten wurde. Menschen entwickeln sich immer noch in C # 6.0
Fus Ro Dah

14

Gerade zufällig herausgefunden, in vs2017 können Sie dies der Kürze halber tun:

if (!Int64.TryParse(id, out _)) {
   // error or whatever...
}

2
Das ist der Discard-Operator.
Patrick Hofman

9

Dies ist eine neue Funktion aus C # 7, eine sehr schöne Funktion, die häufig in Verbindung mit dem Mustervergleich verwendet wird. Diese und viele weitere Funktionen werden im C # -Team-Blog " Neuigkeiten in C # 7.0" angekündigt .

Das, was das Team hier erreichen will, ist flüssigerer Code. Erinnern Sie sich an einige Fälle, in denen die Liste der Out-Variablen ohne Verwendung extrem lang wird? Nur ein kurzes Beispiel:

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*/ }

Sehen Sie das Problem? Es ist sinnlos, wenn all diese Out-Variablen dort sitzen und nichts tun. Die Anzahl der Zeilen kann mit C # 7 halbiert werden:

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*/ }

Es wird nicht nur die Anzahl der Zeilen minimiert, es gibt auch keine unnötige Liste von Variablen im Bereich, in denen Sie sie nicht haben möchten. Dies verhindert, dass Sie eine Variable verwenden, die Sie nicht verwenden wollten, die aber jetzt für Sie sichtbar ist.

Diese Funktion ist auch beim Mustervergleich in switchAnweisungen nützlich , wie in diesem Code (der sich anders verhält als der obige Code!):

switch (o)
{
    case int i: { /*use i*/ break; }
    case Guid g: { /*use g*/ break; }
    case DateTime d: { /*use d*/ break; }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.