【发布时间】:2011-06-20 12:53:28
【问题描述】:
假设我有一个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 框架例程也可以做到这一点。像这样的东西会起作用:
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 不是通用的,而代表是)?
【问题讨论】:
-
'真的,为什么 MulticastDelegate 在委托时不是泛型' MulticastDelegate 从 1.1 开始就在框架中,这意味着在编码时没有任何泛型可用。
标签: c# .net generics delegates