Yeo*_*Yeo 6 c# python parameters parameter-passing
生命短暂
def foo(b,a,r):
# bla bla bla
pass
mylist = ['b','a','r']
foo(*mylist)
Run Code Online (Sandbox Code Playgroud)
这就是在Python中将参数列表传递给方法多个位置参数的方式。
但在C#中,我发现了传递一个数组到数组的参数使用PARAMS关键字,像这样的:
void foo(params string[] bar)
{
// bla bla bla
}
string[] mylist = {"b", "a", "r"};
foo(mylist)
Run Code Online (Sandbox Code Playgroud)
想象一下如果我无法触摸该功能,有没有更简单的方法有没有办法做到这一点?
这就是我的意思:
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
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,找不到替代方法。只是想确保我没有错过 C# 提供的隐藏功能。谁知道我们有这样的捷径?
不,C# 中没有任何功能可以让您直接执行此操作。但您可以使用一些方法来解决这个问题:
创建一个方法,将具有多个参数的方法转换为具有一个数组参数的方法:
static Action<T[]> ToArrayMethod<T>(Action<T, T, T> original)
{
return array => original(array[0], array[1], array[2]);
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
string[] array = {"b", "a", "r"};
var arrayFoo = ToArrayMethod(foo);
arrayFoo(array);
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是该方法仅适用于具有三个参数且void返回类型的方法。ToArrayMethod()如果您希望它适用于具有 4 个参数的方法或返回某些值的方法,则需要编写另一个重载。
使用反射。执行此操作时,使用数组传递参数:
var foo = typeof(SomeType)
.GetMethod("foo", BindingFlags.Instance | BindingFlags.NonPublic);
object[] array = {"b", "a", "r"};
foo.Invoke(somTypeInstance, array);
Run Code Online (Sandbox Code Playgroud)