C#链接参数函数调用
在C#中是否可以接受C#链接参数函数调用,c#,wrapper,params,C#,Wrapper,Params,在C#中是否可以接受params参数,然后将其作为params列表传递给另一个函数?目前,如果我没有弄错的话,下面的函数将作为一个参数传递args,该参数是object类型的数组。这里的目标是不言而喻的 //ScriptEngine public object[] Call(string fnName, params object[] args) { try{ return lua.GetFunction(fnName).Call(args); } cat
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[]
是的,这是可能的。在您的情况下,args
实际上是一个对象数组。您的调用
方法应该以params object[]
或仅仅是一个对象数组作为参数
您不需要将多个参数传递给params
。您可以直接传递数组。例如,这是完全有效的:
public void SomeMethod(params int[] args) { ... }
SomeMethod(new [] { 1, 2, 3 });
可以将数组传递给另一个函数:
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);
}
如果您正在调用的
Call
方法的签名接受params object[]args
,那么您就错了。它不考虑<代码> ARGs<代码>一个THPE <代码>对象< /代码>的对象,被封装在另一个数组中。它认为它是整个参数列表,这就是您想要的。它会像现在一样正常工作。啊,我明白了,谢谢。因此,params
将给定数组按其第一个维度分解以填充参数?@selkathguy不完全是这样。如果提供的类型完全匹配,它将完全传递它。如果没有,并且可以将参数视为一项,则将其包装在数组中。如果两者都不行,那么它就不会编译。如果提供的类型与数组类型不完全匹配,则它不会将其视为整个数组,而是其中的一个对象。因此,将一个包含5个对象的数组传递给函数,如fn(对象a、对象b、参数对象[]c)
,将在a
和b
中分别提交一个,那么剩下的将被c吃掉?@selkathguy不。这不会编译。您需要传递两个对象和一个数组,或者传递两个对象和任意数量的附加对象。与其他一些语言不同,您不能将数组作为任意函数的参数列表传递(不使用反射)。明白了。非常感谢你!