• 委托传参,lambda


    今天一朋友问到一问题,怎么在timer的委托里面传参数,我初一想Invoke

    可以传参数吧,我就说了。 后来他说这个委托是微软定义,不能变参数,于是我就自己写了一段代码试

    试. 我最初写的代码如下

        public class A
        {
            public string p = string.Empty;
            public void foo(object sender, System.Timers.ElapsedEventArgs e)
            {
                B.foo(p);
            }
        }
    

      然后在循环里 为A的对象传参数

                string[] a = { "a", "b", "c" };
    
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 1000;
    
    
                foreach (string s in a)
                {
                    A aaa = new A();
                    aaa.p = s;
                    timer.Elapsed += aaa.foo;
                }
                timer.Start();
    

      

    这样是实现了效果,但是我不是很爽,因为如果我很多参数,那我不是要创

    建很多A的对象,如果A中还有其它的数据,那是否是浪费空间呢?

    后在我修改了一个版本,如下

        public static class B
        {
            public static void foo(string s)
            {
                Console.WriteLine(s);
            }
        }

    这个是要接受参数运行的方法

    调用的地方就用lambda表达式实现变量,参数穿越效果,

                foreach (string s in a)
                {
                    timer.Elapsed +=(sender,e)=>{B.foo(s);};
                }

      这样代码简单,而且空间不浪费。

  • 相关阅读:
    mina:IoBuffer 常用方法(转载)
    js:对象之间的复制
    jquery与angular的交互
    javax.crypto.BadPaddingException: Given final block not properly padded
    jstree:重新加载数据集,刷新树
    TCP 握手 -> 微服务
    eclipse 中添加source
    02 IO
    为什么常用 Map<> map = new HashMap()
    自组织 Self-Orginaztion
  • 原文地址:https://www.cnblogs.com/gw2010/p/3443267.html
Copyright © 2020-2023  润新知