intやdoubleなどの異なる戻り値の型を持つメソッドがあります。異なるリターンタイプを持つ一般的なデリゲート
しかし、私は今、さまざまな方法を反復しようとしています。
私はこのようにそれを試してみてください。
delegate T MeDelegate<T>();
class Program
{
static void Main(string[] args)
{
Func<int> d = ReturnFive;
d += ReturnTen;
d += ReturnTwentyTwo;
d += returnDoubles;
foreach (int i in GetAllReturnValues(d))
Console.WriteLine(i);
Console.ReadKey();
}
static IEnumerable<TArgs> GetAllReturnValues<TArgs>(Func<TArgs> d)
{
List<int> ints = new List<int>();
foreach (Func<TArgs> item in d.GetInvocationList())
yield return item();
}
static int ReturnFive() { return 5; }
static int ReturnTen() { return 10; }
static int ReturnTwentyTwo() { return 22; }
static double returnDoubles() { return 1.0; }
}
とofcourseのこの:Func<int> d
doesntの仕事。しかし、これを改善する方法は?
は、私はそれが何をしたいのですかどうか分からないが、以下のコードを使用しようとするあなたに
。 funcの型はコンパイル時に設定され、double型ではありません。ここで何をしようとしているのか分かりませんが、このようなことをしなければならない場合は、戻り値をカプセル化してジェネリックを完全に削除する型を返してください。 – Will
イベントをdに追加するだけです。あなたは関数へのポインタでdを詰めたがっています。 func [] d = new func [] {ReturnFive、ReturnTen、ReturnTwentyTwo、returnDoubles}; –
Muckeypuck