我有这种功能
void func(params object[] parameters) { //Function Body }
它可以接受以下类型的参数
func(10,"hello",30.0); func(10,20);
等等.
我想为上面的函数创建一个Action委托.可能吗?如果不是那么为什么?
解决方法
您不能将现有的Action代理与params一起使用,但您可以通过以下方式声明自己的委托:
public delegate void ParamsAction(params object[] arguments)
然后:
// Note that this doesn't have to have params,but it can do public void Foo(object[] args) { // Whatever } ... ParamsAction action = Foo; action("a",10,20,"b");
当然你可以创建一个Action< object []>对于你现有的方法 – 但你失去了它的params方面,因为它没有在Action< T>中声明.例如:
public static void Foo(params object[] x) { } ... Action<object[]> func = Foo; func("a","b"); // Invalid func(new object[] { "a","b" }); // Valid
因此,如果您从想要使用params的代码调用委托,则需要一个委托类型,其中包含声明中的委托类型(根据第一部分).如果您只想创建一个接受对象[]的委托,那么您可以创建一个Action< object []>的实例.使用一种在其签名中具有参数的方法 – 它只是一个有效的修饰符.