是否可以在C#中创建匿名委托列表?这是我想写的代码,但它没有编译:
Action<int> method;
List<method> operations = new List<method>();
答案 0 :(得分:16)
你可以写这个,例如
Action<int> method = j => j++;
List<Action<int>> operations = new List<Action<int>>();
operations.Add(method);
operations.Add(i => i++);
答案 1 :(得分:3)
您的代码的问题在于您尝试将实例指定为List的类型参数。
Action<int> method
是一个实例,而Action<int>
是一种类型。
正如另一张海报所提到的,你只需要将列表类型声明为Action<int>
,即只使用类型参数。
e.g。
var myNum = 5;
var myops = new List<Action<int>>();
myops.Add(j => j++);
myops.Add(j => j++);
foreach(var method in myops)
{
Console.WriteLine(method(myNum));
}
// Frowned upon, but fun syntax
myops.Each(method => method(myNum));
答案 2 :(得分:0)
当然可以创建特定委托类型的列表,例如Action或Func,或其他任何类型。由于匿名委托可以转换为具有兼容签名的任何委托类型,因此只要具有兼容签名,就可以创建委托列表。
我不认为创建具有多种签名的委托列表会有很大用处,因为具有未指定的签名会使调用委托变得非常困难。不过,你应该可以用反射来做到这一点。在这种情况下,您只需使用对象列表。