回答
我覺得非常有用使用匿名方法來避免全局變量
如果沒有匿名方法:
private static Dictionary<Binding, ErrorProvider> dict =
new Dictionary<Binding, ErrorProvider>();
public static void ParseBinding(Binding binding)
{
var errorProvider = new ErrorProvider();
dict.Add(binding, errorProvider);
binding.Parse += new ConvertEventHandler(binding_Parse);
}
static void binding_Parse(object sender, ConvertEventArgs e)
{
var binding = sender as Binding;
var errorProvider = dict[binding];
try
{
// some validation form e.Value
// throws exception if not valid
}
catch (Exception ex)
{
errorProvider.SetError(binding.Control, ex.Message);
}
}
這是非常危險的,因爲我需要照顧我自己從刪除的條目字典,如果不再使用,否則我有內存泄漏,因爲垃圾回收器永遠不會處理綁定或錯誤提供程序。
現在簡單多了實現匿名方法:
public static void ParseBinding(Binding binding)
{
var errorProvider = new ErrorProvider();
binding.Parse += (sender, e) =>
{
try
{
// some validation form e.Value
// throws exception if not valid
}
catch (Exception ex)
{
errorProvider.SetError(binding.Control, ex.Message);
}
};
}
閱讀MSDN:Anonymous Methods (C# Programming Guide):
創建匿名方法基本上是傳遞一個代碼塊 作爲委託參數的方式。
通過使用匿名方法,您可以通過消除創建單獨的 方法來減少實例化代表的編碼開銷。
例如,在一個委託的地方指定碼塊不必創建方法似乎一個 不必要的開銷
它是一種當可 有用的情況在目標位於 塊之外的匿名方法塊內,有跳轉語句錯誤(如goto,break或 )。跳轉語句(例如goto, break或continue)在塊內部的目標爲 的匿名方法塊之外也是錯誤的。
匿名方法無法訪問外部作用域的ref或out參數。
在匿名方法塊內不能訪問不安全的代碼。
而且讀Create Elegant Code with Anonymous Methods, Iterators, and Partial Classes
匿名方法被定義在線,而不是作爲 任何類的成員方法。此外,無法將方法屬性應用於匿名方法,也不能將匿名方法定義爲通用類型 或添加通用約束。
可能會有所幫助......
http://www.dotnet-tricks.com/Tutorial/csharp/40ID180612-C-Sharp-Anonymous-Method.html
有幾個缺點,雖然使用匿名方法。首先,您不能使用Visual Studio調試器中的「編輯並繼續」功能。在單步執行代碼時不允許對方法或匿名方法進行更改 - 相反,您必須更改代碼並重新啓動調試器。
另一個潛在的問題是,假設匿名方法中的代碼需要執行以響應多個事件,一些開發人員可能會發現自己在其應用程序的多個位置複製並粘貼代碼,因此忽略了一般規則的代碼重用。
- 1. WPF:UnauthorizedAccessException使用匿名方法
- 2. 使用匿名方法
- 3. getPrincipal()方法返回匿名用戶
- 4. 範圍和匿名方法
- 5. 如何使用從方法返回的匿名類型
- 6. 匿名匿名方法未授權?
- 7. 調用方法匿名類
- 8. 調用匿名方法
- 9. 方法,返回匿名類型C#
- 10. 匿名方法返回類型鑄造
- 11. 方法返回匿名對象
- 12. 用於縮進匿名方法的ReSharper配置?
- 13. 訂閱使用匿名方法
- 14. 使用匿名過濾方法
- 15. C中的遞歸和匿名方法#
- 16. 無法調用匿名類的方法
- 17. 如何使用匿名方法返回值?
- 18. 可選的匿名方法
- 19. 匿名方法的問題
- 20. 測試,在一個匿名類實例的方法被調用
- 21. Unity3D中的C#匿名函數示例
- 22. 匿名方法,範圍和序列化
- 23. 匿名函數和F#重載方法
- 24. 匿名方法和異步I/O
- 25. 如何執行回調方法而不是匿名方法?
- 26. Invoke調用中的匿名方法
- 27. 實現匿名用戶方法的Simplemembership
- 28. 調用匿名類的子類方法
- 29. @用於Html.BeginForm的匿名方法
- 30. 創建匿名控制器的實例,並使用它的方法
參見[什麼 - 是匿名的方法,在-C(http://stackoverflow.com/questions/6008097/what-are- anonymous-methods-in-c)有例子。 – nawfal