我正在编写一个旨在与在线游戏互动的机器人。我正在使用一个名为“Send”的函数,其定义如下:
public void Send(string type, params object[] parameters);
由于params
关键字,“发送”是一个可以包含可变数量参数的函数。如果我将这些参数存储在List<object>
中,我是否可以将此参数列表传递给函数,而不必为每个可能数量的参数编写不同的代码?
我知道如果那个params
关键字不存在,我可以使用List<T>.ToArray()
将整个列表作为一个参数传递,但是发送函数是在预备文件库中定义的,我不能改变。
答案 0 :(得分:2)
小解释:
var myList = new List<object>() { 1, "foo", "bar"};
Send(type, myList.ToArray()); //this will invoke: void Send(string, object, object, object);
Send(type, (object)myList.ToArray()); //this will invoke: void Send(string, object);
Send(type, myList); //this will invoke: void Send(string, object);
因此,如果您希望列表被视为参数 - 您可以调用ToArray(),如果您希望将其视为单个参数 - 只需将其转换为反对。
答案 1 :(得分:0)
但是Send函数是在预制备的库中定义的,我无法改变。
您可以定义扩展方法
// Where Lib is the type that contains the Send method.
public static class MyExtensions
{
public static void Send(this Lib lib, string type, int obj)
{
lib.Send(type, obj);
}
public static void Send(this Lib lib, string type, List<object> objs)
{
lib.Send(type, objs.ToArray());
}
// Other overloads
}
然后你就像使用它一样构建到库中来使用它,
var lib = new Lib();
lib.Send(type, 1) // Call Send(this Lib lib, string type, int obj)