加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有可变参数的函数的委托

发布时间:2020-12-15 07:55:17 所属栏目:百科 来源:网络整理
导读:我有这种功能 void func(params object[] parameters) { //Function Body} 它可以接受以下类型的参数 func(10,"hello",30.0);func(10,20); 等等. 我想为上面的函数创建一个Action委托.可能吗?如果不是那么为什么? 解决方法 您不能将现有的Action代理与para
我有这种功能
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 []>的实例.使用一种在其签名中具有参数的方法 – 它只是一个有效的修饰符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读