您可以像建议的那样使用字典,并创建一个方法调用器,从字典中构建参数数组,并从传入的实例中调用该方法。
public static class Invoker
{
public static void Invoke<TClass>(string methodName, Dictionary<string, object> myParameterObject, TClass instance)
{
var method = typeof(TClass).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
var parameters = method.GetParameters().Select(parameter => myParameterObject.ContainsKey(parameter.Name) ? myParameterObject[parameter.Name] : null).ToArray();
method.Invoke(instance, parameters);
}
}
然后像这样调用
var parameters = new Dictionary<string, object> { { "b", "b_value" }, { "c", "c_value" } };
var myClass = new MyClass();
Invoker.Invoke("MyMethod", parameters, myClass);
Console.ReadKey();
假设你的 MyClass 包含 MyMethod。
public class MyClass
{
private void MyMethod(string a = "", string b = "", string c = "")
{
Console.WriteLine("a : " + a + " b : " + b + " c : " + c);
}
}
尽管这种方法容易出现错误,但对于反思技巧的培养非常有用。
List<MyParameterObject>
? - Liam