It is possible to
Invoke
a
method
using
named parameters
as explained here
http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx[
^]
In one of the over loads of the
Type.InvokeMember
method we can pass an array of
namedParameters
as explained here
http://msdn.microsoft.com/en-us/library/de3dhzwy[
^]
The method of a class can be invoked using parameter names and values stored in a
List of KeyValuePairs
as shown below:
Car car = new Car();
List<KeyValuePair<string,object>> paramData = new List<KeyValuePair<string,object>>();
paramData.Add(new KeyValuePair<string,object>("param2",50));
paramData.Add(new KeyValuePair<string,object>("param1","speed"));
car.GetType().InvokeMember("PrintData", BindingFlags.InvokeMethod, null, car,
paramData.Select (d => d.Value).ToArray()
,null,null, paramData.Select (d => d.Key).ToArray());
List<KeyValuePair<string,object>> paramData2 = new List<KeyValuePair<string,object>>();
paramData2.Add(new KeyValuePair<string,object>("param1","Speed---"));
paramData2.Add(new KeyValuePair<string,object>("param2",100));
car.GetType().InvokeMember("PrintData", BindingFlags.InvokeMethod, null, car,
paramData2.Select (d => d.Value).ToArray()
,null,null, paramData2.Select (d => d.Key).ToArray());
public class Car {
public void PrintData(string param1, int param2){
Console.WriteLine ("param1={0} and param2 = {1}",param1,param2);
}
}