gpt4 book ai didi

c# - 将Argument数组传递给C#中的多参数函数

转载 作者:太空狗 更新时间:2023-10-30 02:49:13 24 4
gpt4 key购买 nike

Life is short

def foo(b,a,r):
# bla bla bla
pass

mylist = ['b','a','r']
foo(*mylist)

这就是如何在 Python传递参数列表到方法多个位置参数

但在 C# 中,我发现使用params 关键字将数组传递 到数组的参数,如下所示:

void foo(params string[] bar)
{
// bla bla bla
}

string[] mylist = {"b", "a", "r"};
foo(mylist)

想象一下如果我不能触摸功能,有没有更简单的方法有办法吗?

我的意思是:

void foo (string b, string a, string r)
{
// bla bla bla
}

string[] mylist = {"b", "a", "r"};
foo(mylist[0],mylist[1],mylist[2]); // This line makes my life difficult

我在网上搜索,找不到替代品。只是想确保我没有错过 C# 提供的隐藏功能。谁知道我们有这样的捷径?

最佳答案

不可以,C# 中没有允许您直接执行此操作的功能。但是您可以使用一些方法来解决这个问题:

  1. 创建一个方法,将具有多个参数的方法转换为具有一个数组参数的方法:

    static Action<T[]> ToArrayMethod<T>(Action<T, T, T> original)
    {
    return array => original(array[0], array[1], array[2]);
    }

    然后像这样使用它:

    string[] array = {"b", "a", "r"};

    var arrayFoo = ToArrayMethod(foo);

    arrayFoo(array);

    此方法的缺点是此方法仅适用于具有恰好三个参数且返回类型为 void 的方法。如果您希望它适用于具有(例如)4 个参数的方法,或者返回某些值的方法,则您需要编写另一个 ToArrayMethod() 重载。

  2. 使用反射。这样做时,使用数组传递参数:

    var foo = typeof(SomeType)
    .GetMethod("foo", BindingFlags.Instance | BindingFlags.NonPublic);

    object[] array = {"b", "a", "r"};

    foo.Invoke(somTypeInstance, array);

关于c# - 将Argument数组传递给C#中的多参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com