如何在List中存储代理

时间:2010-09-28 13:36:52

标签: c# .net generics delegates lambda

如何将代理(named,anonymous,lambda)存储在通用列表中?基本上我正在尝试构建一个委托字典,从中我可以使用密钥访问存储的委托并执行它并按需返回值。是否可以在C#4中完成?有什么想法来实现它吗? 注意:异类列表更适合存储任何类型的委托。

5 个答案:

答案 0 :(得分:17)

System.Collections.Generic.Dictionary<string, System.Delegate>不够吗?

答案 1 :(得分:8)

嗯,这是一个简单的例子:

class Program
{
    public delegate double MethodDelegate( double a );

    static void Main()
    {
        var delList = new List<MethodDelegate> {Foo, FooBar};


        Console.WriteLine(delList[0](12.34));
        Console.WriteLine(delList[1](16.34));

        Console.ReadLine();
    }

    private static double Foo(double a)
    {
        return Math.Round(a);
    }

    private static double FooBar(double a)
    {
        return Math.Round(a);
    }
}

答案 2 :(得分:2)

1-object(of ArrayList)

答案 3 :(得分:0)

        Dictionary<string, Func<int, int>> fnDict = new Dictionary<string, Func<int, int>>();
        Func<int, int> fn = (a) => a + 1;
        fnDict.Add("1", fn);
        var re = fnDict["1"](5);

答案 4 :(得分:-1)

List<System.Delegate> something;
something.Add(new Action(()=> DoSomething()));

如果你想自定义key,你可以像上面一样使用Dictionary