2017-07-08 4 views
1

Beispiel:Umfang Variable out-Parameter

Ich habe folgenden Codeblock:

if (!int.TryParse("123", out var parsedNumber)) 
{ 
    return; 
} 

Console.WriteLine(parsedNumber); 

Der Ausgang in der Konsole ist: 123

Frage:

Wie ist es möglich, dass die Linie Console.WriteLine(parsedNumber); überweiß?

Nach meinem Verständnis, parsedNumber sollte nur in der if-block, sollte es nicht?

Wenn ich versuche dies:

foreach (var data in dataList) 
{ 
    data += "something"; 
} 

Console.WriteLine(data); 

Console.WriteLine(data); nicht data finden.


Ich denke, dass die Lösung der Out-Parameter ist, aber ich bin mir nicht sicher. Kann jemand das erklären?

Antwort

2

Ja, wie Sie vermuten, ist der Unterschied "out" Modifikator.

Es ist ein Feature in C# 7 hinzugefügt, mit dem Sie die Variable an dem Punkt deklarieren können, wo Sie es als Argument verwenden möchten.

Das könnte nützlich sein, sonst müssten Sie vor dem Methodenaufruf parsedNumber deklarieren.

Sie können mehr darüber hier unter "Out-Variablen" lesen.

https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/

EDIT

Was, warum die Variable ist immer noch in ihrem Umfang außerhalb der if, die sicherlich verwirrend sein können, aber es war eine Wahl Design, wenn diese Implementierung, die speziell für die " wenn "Fall und genau so, dass es in" try "Methoden verwendet werden könnte.

Sie können auf diesen Kommentar verweisen (eigentlich können Sie sich die ganze Diskussion ansehen, um die verschiedenen Standpunkte zu sehen, wie es zu implementieren war).

https://github.com/dotnet/roslyn/issues/12939#issuecomment-255650834

+1

denke ich, was er/sie fragt ist, warum aus if() {}, können wir immer noch Zugriff auf parsedNumber – EntryLeveDeveloper

+0

@CodeContributor: Ja, das macht auch Sinn, fügte ein EDIT meiner Antwort hinzu, um das zu bedecken – eugenioy

+0

Danke für diese gute Erklärung. –

2

Vor C# 7,0

das Schlüsselwort verwendet wurde herausReferenz ist eine Methode Argument übergeben. Bevor eine Variable als out-Argument übergeben wird, muss sie deklariert werden.

var parsedNumber; 
if (!int.TryParse("123", out var parsedNumber)) 
{ 
    return; 
} 

Console.WriteLine(parsedNumber); 

In C# 7.0

Sie eine Methode aus Parametern direkt in der Methode definieren.Der neue Code sieht aus wie

if (!int.TryParse("123", out var parsedNumber)) 
{ 
    return; 
} 

Console.WriteLine(parsedNumber); 

Referenz:

Whats-new-in-csharp-7-0

+0

Vielen Dank für Ihr Beispiel –