c# - 使用匿名方法的例子和缺点

标签 c# anonymous-methods

<分区>

谁能举例说明如何使用匿名方法?

它们是否有缺点,例如使用它们会导致性能下降?

最佳答案

我发现使用匿名方法避免全局变量非常有用

没有匿名方法:

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);
     }
}

这真的很危险,因为如果不再使用,我需要自己小心地从字典中删除条目,否则我会发生内存泄漏,因为垃圾收集器永远不会处理绑定(bind)或错误提供程序。

现在使用匿名方法更简单的实现:

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);
           }
        };
}

关于c# - 使用匿名方法的例子和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065651/

相关文章:

c# - 问题是在 Windows 7 中为 UBL Api 安装 .pem 扩展安全证书

c# - 匿名函数体变量保存在哪里?

c# - 不能在成员初始值设定项中使用 'this'?

c# - 在匿名方法中使用 MethodInfo.GetCurrentMethod()

c# - 使用可以嵌入自身的正则表达式进行解析/拆分

c# - 在 asp.net 回发期间禁用和启用按钮

c# - 使用 XML 作为存储和 Google Drive

c# - 如何取消注册 'anonymous' 事件处理程序

javascript - javascript 中嵌套匿名方法的闭包

c# - 为什么 UriBuilder.query 不转义(url 编码)查询字符串?