webentwicklung-frage-antwort-db.com.de

TryParse ohne var param

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

string s = "Hello";

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

}

Aber ich erhalte Kompilierungsfehler: enter image description here

Was mache ich falsch? P.S .: In den Projekteinstellungen sind C # 6.0 und .NET Framework 4.6 eingestellt.

88
Anton23

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

Deklarationsausdrücke wurden aus C # 6.0 herausgeschnitten und in der endgültigen Version nicht ausgeliefert. Das kannst du momentan nicht. Es gibt einen Vorschlag dafür auf GitHub für C # 7 (siehe auch this für zukünftige Referenz).

Aktualisierung (07/03/2017)

Mit der offiziellen Version von C # 7 wird der folgende Code kompiliert:

string s = "42";

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

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

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

Dies ist eine neue Funktion aus C # 7, die häufig in Verbindung mit Pattern Matching verwendet wird. Diese und viele weitere Funktionen werden im C # -Team-Blog angekündigt Was ist neu in C # 7.0? .

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 extrem lang wird und keine Verwendung findet? 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, dass all diese Out-Variablen da 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 Gültigkeitsbereich, in denen Sie sie nicht haben möchten. Dies verhindert, dass Sie eine Variable verwenden, die Sie nicht verwenden wollten, die jetzt jedoch für Sie sichtbar ist.

Diese Funktion ist auch nützlich bei der Mustererkennung in switch -Anweisungen, 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; }
}
9
Patrick Hofman