Как хранить делегаты (имена, анонимные, лямбда) в общем списке? В основном я пытаюсь создать словарь делегатов, откуда я могу получить доступ к хранимому делегату с помощью ключа и выполнить его и вернуть значение по требованию. Можно ли сделать в С# 4? Любая идея, чтобы выполнить это? Примечание. Гетерогенный список предпочтительнее, если я могу хранить любых делегатов.
Как хранить делегатов в списке
Ответ 1
Не хватает ли System.Collections.Generic.Dictionary<string, System.Delegate>
?
Ответ 2
Ну, вот простой пример:
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);
}
}
Ответ 3
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();
}
Ответ 4
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);