2 回答

TA貢獻1890條經(jīng)驗 獲得超9個贊
這是對C#語言的更改,而不是.NET框架。因此,它只影響在C#5.0下編譯的代碼,而不考慮該代碼將在其上執(zhí)行的.NET Framework版本。
C#5.0
規(guī)范的第8.8.4節(jié)清楚地表明已進行了此更改。具體來說,C#5.0規(guī)范的第249頁指出:
foreach (V v in x) embedded-statement
然后擴展為:
{
E e = ((C)(x)).GetEnumerator();
try {
while (e.MoveNext()) {
V v = (V)(T)e.Current;
embedded-statement
}
}
finally {
… // Dispose e
}
}
然后:
v在while循環(huán)中的位置對于嵌入式語句中出現(xiàn)的任何匿名函數(shù)如何捕獲它很重要。
C#4.0
與聲明的C#4.0規(guī)范相比,對規(guī)范的這一更改是顯而易見的(同樣在8.8.4節(jié)中,但是這次是第247頁):
foreach (V v in x) embedded-statement
然后擴展為:
{
E e = ((C)(x)).GetEnumerator();
try {
V v;
while (e.MoveNext()) {
v = (V)(T)e.Current;
embedded-statement
}
}
finally {
… // Dispose e
}
}
請注意,該變量v是在循環(huán)外部而不是內(nèi)部聲明的,就像在C#5.0中那樣。
注意
您可以在Visual Studio的安裝文件夾下的C#規(guī)范中找到VC#\Specifications\1033。VS2005,VS2008,VS2010和VS2012就是這種情況,使您可以訪問C#1.2、2.0、3.0、4.0和5.0的規(guī)范。您還可以通過搜索在MSDN上找到規(guī)范C# Specification。

TA貢獻1811條經(jīng)驗 獲得超5個贊
一個很好的例子:List<Action> list = new List<Action>(); foreach (var i in new int[] { 1, 2, 3, 4, 5 }) { list.Add(() => Console.WriteLine(i)); } foreach (var f in list) { f(); }
- 2 回答
- 0 關(guān)注
- 804 瀏覽
添加回答
舉報