C#.NET 3.5。我試圖理解C#Action對象的內在限制。在lamda中(實際上是lamdas?),我們可以執行賦值,調用函數,甚至執行三元操作,但是我們不能執行多語句操作。C#操作的限制lambda代碼塊
這是因爲單語句執行只是語法糖包裝它在委託?爲什麼下面的第一個例子不起作用?
public class MyClass
{
private int m_Count = 0;
public void Test()
{
int value = 0;
// Does not work, throws compile error
Action action =() => { if(m_Count < 10) m_Count++; value = m_Count; }
// Works
Action action2 =() => value = delegate(){
if(m_Count < 10)
m_Count++;
return m_Count;
};
// Works
Action action3 =() => value = m_Count;
// Works
Action action4 =() => value = m_Count < 10 ? m_Count++ : 0;
// Works
Action action5 =() => value = Increment();
}
public int Increment()
{
if (m_Count < 10)
m_Count++;
return m_Count;
}
}
編輯:Grr,抱歉的噪音。我本來
Action action =() => if(m_Count < 10) m_Count++; value = m_Count;
扔哪一個編譯錯誤,但我想我會嘗試在括號
Action action =() => { if(m_Count < 10) m_Count++; value = m_Count; }
其中還扔了一個編譯錯誤,它包裹後前右,所以我跳下得出的結論是這是同樣的問題。如果我在大括號後面用分號折騰
Action action =() => { if(m_Count < 10) m_Count++; value = m_Count; };
不好意思!
編輯2:感謝cfeduke,你發佈,在我上面編輯的同時 - 繼續並標記爲答案。
不能立即看到有什麼問題 - 你得到了什麼編譯錯誤? – 2008-10-24 16:27:49