Как хранить делегатов в списке

Как я могу хранить делегатов (именованные, анонимные, лямбда) в общем списке? В основном я пытаюсь создать словарь делегатов, откуда я могу получить доступ к сохраненному делегату, используя ключ, выполнить его и вернуть значение по требованию. Возможно ли это сделать в C # 4? Есть идеи сделать это? Примечание. Гетерогенный список предпочтителен, если я могу хранить любые виды делегатов.

 Sam Saffron28 сент. 2010 г., 15:40
Словарь <string, Action>?
 Sam Saffron28 сент. 2010 г., 15:43
Заметьте, что гетерогенность - плохая идея, как вы узнаете, какие параметры вы должны передать делегату?

Ответы на вопрос(4)

Ну, вот простой пример:

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);
    }
}
 Anindya Chatterjee28 сент. 2010 г., 15:52
Я не ищу такого решения. Решение принимает только специальный вид именованного делегата, а не другие.
    public delegate void DoSomething();

    static void Main(string[] args)
    {
        List<DoSomething> lstOfDelegate = new List<DoSomething>();
        int iCnt = 0;
        while (iCnt < 10)
        {
            lstOfDelegate.Add(delegate { Console.WriteLine(iCnt); });
            iCnt++;
        }

        foreach (var item in lstOfDelegate)
        {
            item.Invoke();
        }
        Console.ReadLine();
    }
        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);
 Anindya Chatterjee28 сент. 2010 г., 15:53
Я ищу более общее решение, где нет никаких ограничений для делегатов.
Решение Вопроса

Есть лиSystem.Collections.Generic.Dictionary<string, System.Delegate> не хватает?

 Anindya Chatterjee28 сент. 2010 г., 15:43
таким образом я не могу хранить анонимных делегатов или лямбды.
 Timwi28 сент. 2010 г., 15:45
@Anindya Чаттерджи: Да, вы можете:dic.Add("action", new Action(() => Console.WriteLine("action called!")));
 Anindya Chatterjee28 сент. 2010 г., 15:56
Да, спасибо, что напомнили мне, я полностью забыл о --new Action (() => Console.WriteLine («действие вызвано!»)) -

Ваш ответ на вопрос