本帖最后由 sunwukong 于 2011-08-16 14:45:18 编辑

解决方案 »

  1.   

    委托是变量而不是方法调用,所以不能有参数,委托就是一个函数指针,是一个内存地址,把这个地址传给list.FindAll方法,list.FindAll方法内部才调用委托指向的方法,真正调用在list.FindAll内部,而不是在你看到的代码中,
      

  2.   

    我觉得这样比较正常:            List<int> results = list.FindAll(Even(3));
      

  3.   

    你可以把委托看成C++的里面函数指针,申明一个委托,就好像如下的C++代码
    typedef void (*FCN)(char, int); 
      

  4.   

    Even可以直接作为一个变参传入,而也支持Event(3)这样的调用方法,其实是执行了委托的invoke
      

  5.   


    3是啥,其实在FindAll里面会依次用List里面的每个元素作为参数调用Even,Even在这里是一个符合要求的函数指针而已
      

  6.   

    List<int> results = list.FindAll(Even);这种代码叫做“语法糖”,它是编译器所理解的,但是.net framework根本没有这种东西。编译器把它生成为List<int> results = list.FindAll(new Predicate<int>(Even));这里只不过是把Even作为一个Predicate<int>对象实例的实例化参数而使用的。
      

  7.   

    Thanks for all of you guys.
    but, you have to wait until I will have got so many points to send to you.