Нет способа получить а) исключения, б) возвращать значения от делегатов, только путем прослушивания в списке результатов. Другой способ - просто иметь список делегатов и управлять им вручную.
ужно немного больше узнать о делегатах и дизайне языка 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 не является универсальным, когда делегаты)?