C#中是否可以接受params
参数,然后将其作为params
列表传递给另一个函数?如上所述,如果我没有弄错的话,下面的函数会将args
作为单个参数传递,该参数是object
类型的数组。这里的目标是不言而喻的。
//ScriptEngine
public object[] Call(string fnName, params object[] args)
{
try{
return lua.GetFunction(fnName).Call(args);
}
catch (Exception ex)
{
Util.Log(LogManager.LogLevel.Error, "Call to Lua failed: "+ex.Message);
}
return null;
}
lua.GetFunction(fnName).Call(args);
是对我的代码之外的调用,它接受param object[]
。
答案 0 :(得分:7)
如果您正在调用的Call
方法的签名接受params object[] args
,那么 错误。它不会将args
thpe object
的单个对象视为包装在另一个数组中。它认为它是整个参数列表,这是你想要的。它会完全正常工作。
答案 1 :(得分:1)
是的,有可能。在您的情况下args
实际上是一个对象数组。您的Call
方法应该将params object[]
或只是一个对象数组作为参数。
您不需要将多个参数传递给params
。您可以直接传递数组。例如,这是完全有效的:
public void SomeMethod(params int[] args) { ... }
SomeMethod(new [] { 1, 2, 3 });
答案 2 :(得分:1)
可以将数组传递给另一个函数:
void Main()
{
int[] input = new int[] {1,2,3};
first(input); //Prints 3
}
public void first(params int[] args)
{
second(args);
}
public void second(params int[] args)
{
Console.WriteLine(args.Length);
}