“嘿,使用参数列表或使用参数”,但问题并非来自那里。 我有没有参数,一个或多个整数的函数,...用户输入函数的名称和参数列表,我想调用函数并给它列表。 例如:
//void AddUser(int32 age, String name)
List<dynamic> UserList = new List<dynamic>();
UserList.Add(42); UserList.Add("toto");
String FunctionEntered = "AddPerson";
MyFramwork.Call(FunctionEntered, UserList);
//gives UserList(List)
我无法修改输入的函数以允许它将动态值列表作为参数。所以我需要一个解决方案来调用一个函数(我不知道参数的数量)并使用列表的索引1,2,...作为第一个,第二个......参数。
感谢。
PS:别担心,我的框架允许我使用它的名称来调用未知函数。
编辑:我会尝试澄清,我有一个List,我想用这个列表作为参数调用一个函数,但我要调用的函数不要将Lists作为参数(我不能修改功能)。 例如,我想使用List {a,b}作为Sum(int a,int b)的参数,但我无法修改函数,因此我无法通过Sum(int [] ab)或Sum重新设置函数(列表ab)和参数的数量是可变的,所以我不能调用:Sum(myList [0],myList [1])。
答案 0 :(得分:1)
像这样的东西
public void CallMethod(List<dynamic> @params , string methodName , Type t){
var methodInfo = t.GetMethod(methodName);
List<object> convertedParams = new List<object>();
var methodParameters = methodInfo.GetParameters();
for(int i=0;i<methodParameters.Length;i++)
{
convertedParams.Add(Convert.ChangeType(@params[i] , methodParameters[i].ParameterType));
}
var obj = Activator.CreateInstance(t);
methodInfo.Invoke(obj , convertedParams.ToArray());
}
答案 1 :(得分:-1)
http://www.dotnetperls.com/params
参见上文和下文........ SumParameters可以接受任意数量的int参数。所以我想你可以根据自己的需要进行调整。
static int SumParameters(params int[] values)
{
// Loop through and sum the integers in the array.
int total = 0;
foreach (int value in values)
{
total += value;
}
return total;
}