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();
}
- 1. Jak przechowywać tablice na liście STL?
- 2. Przechowywać najpierw znaleźć duplikaty na liście
- 3. jak przechowywać wynik na liście z pętli for?
- 4. Zadeklaruj klasy statyczne, aby można je było przechowywać na liście
- 5. Kilku delegatów na jeden obiekt?
- 6. jak przechowywać wskaźniki na mapie
- 7. przechowywać 2 najwyższe wartości każdego wiersza w liście macierzy r
- 8. Powolne tworzenie delegatów
- 9. opcjonalne delegatów w C#
- 10. Storyboard - ustawienie delegatów
- 11. Łączy dwa Func delegatów
- 12. Asynchroniczne delegatów kontra wątki
- 13. Jak przechowywać dane lokalnie openstreetmap na iPhonie
- 14. Jak przechowywać dane JSON na dysku?
- 15. Jak przechowywać QWidget zawsze na wierzchu?
- 16. Jak przechowywać sesję na wiosnę MVC
- 17. Jak bezpiecznie przechowywać pliki na serwerze
- 18. Jak przechowywać duży wykres na dysku?
- 19. Jak działa operator + do łączenia delegatów?
- 20. Usuwanie delegatów z łańcucha
- 21. ReSharper: formatowanie delegatów
- 22. Standardowe delegatów w C#
- 23. Anonimowa implementacja delegatów w Objective-C?
- 24. Jak zatrzymać wyjątki, niszcząc mój łańcuch delegatów?
- 25. Pierwsze pozycję na liście
- 26. Przenieść pozycję na liście?
- 27. Max DateTime na liście
- 28. Jak przechowywać i wyszukiwać dane na podstawie wielu atrybutów xml?
- 29. Zamów na liście
- 30. Jak przechowywać duże liczby?
Dictionary? –
Uwaga heterogeniczny jest złym pomysłem, skąd będziesz wiedział, jakie parametry powinieneś przekazać delegatowi –