Jak mogę przechowywać delegatów (nazwanych, anonimowych, lambda) na liście ogólnej? Zasadniczo próbuję zbudować słownik delegatów, z którego mogę uzyskać dostęp do przechowywanego delegata za pomocą klucza i wykonać go i zwrócić wartość na żądanie. Czy można to zrobić w C# 4? Masz pomysł, żeby to osiągnąć? Uwaga: Preferowana jest lista heterogeniczna, w której mogę przechowywać każdego rodzaju delegatów.Jak przechowywać delegatów na liście?
Odpowiedz
Czy System.Collections.Generic.Dictionary<string, System.Delegate>
nie wystarczy?
w ten sposób, że nie mogę przechowywać anonimowych delegatów ani lambd. –
@Aindhya Chatterjee: Tak, możesz: 'dic.Add (" akcja ", nowa akcja (() => Console.WriteLine (" akcja nazwana! ")));' – Timwi
Ya, dzięki za przypomnienie mi, całkowicie zapomniałem o - najnowszej akcji (() => Console.WriteLine ("akcja wywołana!")) - –
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);
Szukam bardziej ogólnego rozwiązania, w którym nie ma żadnych ograniczeń dla delegatów. –
Cóż, oto prosty przykład:
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);
}
}
Nie szukam tego rodzaju rozwiązania. Rozwiązanie wymaga tylko specjalnego rodzaju delegata, a nie innych. –
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? –
Uwaga heterogeniczny jest złym pomysłem, skąd będziesz wiedział, jakie parametry powinieneś przekazać delegatowi –