Метод GetInvocationList
У объединённого делегата GetInvocationList
возвращает Delegate[] - по одному
элементу на каждый метод. Длина массива
показывает число целей; у каждого элемента
можно прочитать Method.Name. Цепочку
обычно собирают через
Combine.
Синтаксис
Delegate[] list = chain.GetInvocationList();
int count = list.Length;
Пример
Давайте выведем число целей в цепочке Action:
using System;
class Program
{
static void First()
{
}
static void Second()
{
}
static void Main()
{
Action a = First;
Action b = Second;
Action chain = (Action)Delegate.Combine(a, b);
Delegate[] list = chain.GetInvocationList();
Console.WriteLine(list.Length);
}
}
Результат выполнения кода:
2
Пример
Давайте выведем имена методов из списка:
using System;
class Program
{
static void Alpha()
{
}
static void Beta()
{
}
static void Main()
{
Action a = Alpha;
Action b = Beta;
Action chain = (Action)Delegate.Combine(a, b);
Delegate[] list = chain.GetInvocationList();
string res = list[0].Method.Name + " " + list[1].Method.Name;
Console.WriteLine(res);
}
}
Результат выполнения кода:
"Alpha Beta"
Пример
Давайте обойдём список в цикле и соберём имена:
using System;
class Program
{
static void One()
{
}
static void Two()
{
}
static void Three()
{
}
static void Main()
{
Action chain = (Action)Delegate.Combine(One, Two, Three);
Delegate[] list = chain.GetInvocationList();
string res = "";
foreach (Delegate item in list)
{
res += item.Method.Name;
}
Console.WriteLine(res);
}
}
Результат выполнения кода:
"OneTwoThree"