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# 中没有允许您直接执行此操作的功能。但是您可以使用一些方法来解决这个问题:
创建一个方法,将具有多个参数的方法转换为具有一个数组参数的方法:
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()
重载。使用反射。这样做时,使用数组传递参数:
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/