2013-01-06 54 views
3

通常,當一個方法包含一個lambda表達式的地方在裏面,如果你編輯的方法,Visual Studio會說:如何在編輯包含lambda表達式的方法後繼續調試?

修改「方法」包含lambda表達式將會阻止持續而調試會話編輯並繼續已啓用。

有沒有辦法避免這個錯誤?

在我的情況,我有一個類,其構造函數接受Action

Button(Texture2D t2d, Vector2 v2, Action onPress) 
... 
Button b = new Button(t2d, new Vector2(40, 60),() => { MainStatic.t = t; }); 

此問題的其他信息:

+1

不可能,請看這裏:http://stackoverflow.com/a/582138/1909055 – Mitch

+0

我不明白我如何不能用像我這樣的構造函數來避免它。 – user1306322

回答

9

UPDATE:所需的功能是在Visual Studio 2015年增加,從用戶的許多要求此功能後, 。這個答案和問題現在已經過時了。


是否有辦法避免這種錯誤?

是的。從方法中刪除lambda。或者,不要編輯該方法。

有沒有辦法避免這個錯誤,而不從方法中刪除lambda並仍然編輯該方法?

編號錯誤消息不是騙你。

原因是,如果您好奇,是因爲lambdas被編譯爲嵌套類的方法,並且lambda關閉的局部變量成爲該類的字段。編輯和繼續功能在編輯它時即時重寫當前方法,但即使是簡單的編輯也會導致對這些嵌套類進行復雜更改。調試器團隊並沒有花費大量精力來使E & C適用於該場景,從而從其他更有價值的功能中竊取資源,但調試器團隊只是將其視爲非法。

+0

但是有沒有辦法將lambda表達式改變成不同的東西,然後能夠編輯和whatnot? – user1306322

+1

@ user1306322:好的。將其更改爲不是lambda表達式的東西。例如,將其更改爲嵌套類的方法。如果你做了構建嵌套類的工作,並分析了編輯時需要更改的時間,那麼調試器不必爲你做這件事。 –

+0

請問Roslyn能讓VS團隊更輕鬆地實現這個功能嗎? (鑑於其能夠進行漸進式編譯,如C#交互式窗口中所證明的) – MgSam