C#链接参数函数调用

时间:2014-04-01 15:47:54

标签: c# wrapper params

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[]

3 个答案:

答案 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);
}