我需要更多地了解代表和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框架例程也可以做到这一点。这样的事情会做的工作:
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是不通用的,当代表们”,因为1.1 MulticastDelegate已经在框架中,这意味着当它被编码有不提供任何仿制药。 – Will