Как получить список результатов вызова делегата?

Скажем, у меня есть 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 не является универсальным, когда есть делегаты)?

7
задан Roman Pokrovskij 9 September 2019 в 13:30
поделиться