时间:2010-07-23 15:08:49

标签: c# generics collections delegates action

6 个答案:

答案 0 :(得分:17)

答案 1 :(得分:3)

答案 2 :(得分:1)

答案 3 :(得分:1)

using System;
using System.Collections.Generic;

public delegate void MyDelegate<T>( T i );

public class DelegateList<T>
{
    public void Add( MyDelegate<T> del ) {
        imp.Add( del );
    }

    public void CallDelegates( T k ) {
        foreach( MyDelegate<T> del in imp ) {
            del( k );
        }
    }

    private List<MyDelegate<T> > imp = new List<MyDelegate<T> >();
}

public class MainClass
{
    static void Main() {
        DelegateList<int> delegates = new DelegateList<int>();

        delegates.Add( PrintInt );
        delegates.CallDelegates( 42 );
    }

    static void PrintInt( int i ) {
        Console.WriteLine( i );
    }
}

答案 4 :(得分:0)

答案 5 :(得分:0)

我不知道这是否是你想要的,但如果你想拥有一个为列表中的每个元素调用一个动作的方法,你可以使用这样的扩展方法:

 public static class Extensions
    {
        public static void Action<T>(this IEnumerable<T> list, Action<T> action)
        {
            foreach (T element in list) 
            {
                action.Invoke(element);
            }
        }
    }

使用IEnumerable<string>类型的myList进行调用的例子:

 myList.Action(element => Console.WriteLine(element));

也许LINQ已经在List中实现了一个动作但是如果是这样的话我不知道语法。