Скажем, у меня есть MulticastDelegate
, который реализует общий делегат и содержит несколько вызовов:
Func<int> func = null;
func += ( )=> return 8;
func += () => return 16;
func += () => return 32;
Теперь этот код вернет 32 :
int x = func(); // x=32
Я хотел бы знать, существует ли (или лучше я должен спросить, почему ее не существует!) Функция языка C #, с помощью которой можно получить доступ к результатам всех вызовов делегата, то есть получить list ({8,16,32})?
Конечно, можно сделать то же самое, используя процедуры .NET framework. Что-то вроде этого выполнит работу:
public static List<TOut> InvokeToList<TOut>(this Func<TOut> func)
{
var returnValue = new List<TOut>();
if (func != null)
{
var invocations = func.GetInvocationList();
returnValue.AddRange(invocations.Select(@delegate => ((Func<TOut>) @delegate)()));
}
return returnValue;
}
Но я не могу избавиться от системы, что должен быть лучший способ, по крайней мере, без преобразования (действительно, почему MulticastDelegate не является универсальным, когда есть делегаты)?