我有一些不同返回类型的方法,比如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; }
}
和当然:Func<int> d
不起作用。但是如何改善呢?
谢谢
答案 0 :(得分:0)
我不确定这是否是您想要的,但请尝试使用以下代码。
delegate T MeDelegate<T>();
class Program
{
static void Main(string[] args)
{
Func<object> functionDelegates = ReturnFive;
functionDelegates += ReturnTen;
functionDelegates += ReturnTwentyTwo;
functionDelegates += ReturnSomeDoubleValue;
foreach (object value in GetAllReturnValues(functionDelegates))
{
Console.WriteLine(value);
}
Console.ReadKey();
}
static IEnumerable<TArgs> GetAllReturnValues<TArgs>(Func<TArgs> functionDelegates)
{
return from Func<TArgs> function in functionDelegates.GetInvocationList() select function();
}
static object ReturnFive() { return 5; }
static object ReturnTen() { return 10; }
static object ReturnTwentyTwo() { return 22; }
static object ReturnSomeDoubleValue() { return 1.0; }
}
答案 1 :(得分:0)
+ =电线事件。你想要做的是将它们存储在一个数组中。
class Program
{
static void Main(string[] args)
{
Func<object>[] d = new Func<object>[] { ReturnFive, ReturnTen, ReturnTwentyTwo, returnDoubles };
foreach (object i in GetAllReturnValues<object>(d))
Console.WriteLine(i);
Console.ReadKey();
}
static IEnumerable<object> GetAllReturnValues<TArgs>(Func<object>[] d)
{
List<int> ints = new List<int>();
foreach (Func<object> item in d)
yield return item();
}
static object ReturnFive() { return 5; }
static object ReturnTen() { return 10; }
static object ReturnTwentyTwo() { return 22; }
static object returnDoubles() { return 1.0; }
}
答案 2 :(得分:-1)
不确定你想要实现什么,但如果你想要具有不同回报类型的功能,你可以随时动态
List<dynamic> allReturns = new List<dynamic>{ ReturnFive(), ReturnTen(), ReturnTwentyTwo(), returnDoubles() };
foreach (dynamic i in allReturns)
Console.WriteLine(i);
Console.ReadKey();