2017-07-08 38 views
1

實施例:Scope變量與輸出參數

我有以下代碼塊:

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

Console.WriteLine(parsedNumber); 

在控制檯的輸出是:123

問題:

那怎麼可能呢,那行Console.WriteLine(parsedNumber);知道parsedNumber

據我瞭解,parsedNumber應該只在if-block中可用,應該不是嗎?

如果我試試這個:

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

Console.WriteLine(data); 

Console.WriteLine(data);找不到data


我認爲,解決方案是out參數,但我不確定。有人可以解釋這個嗎?

回答

2

是的,因爲你懷疑區別在於「out」修飾符。

,它在C#7,使您可以在您想要使用它作爲參數點聲明變量增加了一個功能。

這可能是方便,否則你就必須在方法調用之前聲明parsedNumber

你可以在這裏閱讀更多關於它的信息,在「輸出變量」下。

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

編輯

至於爲什麼變量仍然在範圍,如果外面,那肯定會引起混亂,但實現這個的時候,專門爲它設計的選擇「如果「的情況下,並確切地說,它可以用於」嘗試「的方法。

您可以參考此評論(其實你可以在整個討論看看,看的角度有關於如何實現這一不同點)。

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

+1

我覺得他/她問的是,爲什麼會出如果(){},我們仍然可以訪問到parsedNumber – EntryLeveDeveloper

+0

@CodeContributor:是的,這也是有道理的,爲我的答案添加了一個編輯來涵蓋 – eugenioy

+0

謝謝你的好解釋。 –

2

此前C#7.0

out關鍵字被用來傳遞一個方法參數的參考。在變量作爲out參數傳遞之前,必須聲明它。

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

Console.WriteLine(parsedNumber); 

在C#7.0

您可以直接在方法定義一個方法的輸出參數。新的代碼看起來像

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

Console.WriteLine(parsedNumber); 

參考:

Whats-new-in-csharp-7-0

+0

謝謝你的例子 –