デリゲートとC#言語の設計についてもう少し詳しく知る必要があります。デリゲートの呼び出しの結果リストを取得するには?
は私がジェネリックデリゲートを実装し、いくつかの呼び出しを含むMulticastDelegate
を持っている、としましょう:今、このコードは32を返します
Func<int> func = null;
func += ()=> return 8;
func +=() => return 16;
func +=() => return 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は、汎用ではありません」。 – Will