Мне нужно немного больше узнать о делегатах и дизайне языка C #.
Допустим, у меня есть MulticastDelegate
, который реализует универсальный делегат и содержит несколько вызовов:
Func<int> func = null;
func += ( )=> return 8;
func += () => return 16;
func += () => return 32;
Теперь этот код вернет 32:
int x = func(); // x=32
Я хотел бы знать, существует ли (или лучше я должен спросить, почему его нет!) Функция языка C #используя который можно получить доступ к результатам всех вызовов делегата, это значит получить список ({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 не является универсальным, когда делегаты)