我在调用具有不同类型参数的不同方法时面临一个问题。例如。我有3个方法A,B,C,参数如下。
A(string text, int num)
B(bool type, int num2)
C(string text2, boolean type2, int num3)
现在如何逐个调用这三种方法?方法名称作为字符串提取并存储在数组中,在存储之后,需要使用For Each循环调用方法。
答案 0 :(得分:2)
您可以将Dictionary
方法名称和参数保留为string
和object[]
Dictionary<string, object[]> methodsInfo = new Dictionary<string, object[]>
{
{ "A", new object[] { "qwe", 4 }},
{ "B", new object[] { true, 5 }},
{ "C", new object[] { "asd", false, 42 }}
};
使用Invoke
MethodInfo
调用它们
foreach (KeyValuePair<string, object[]> methodInfo in methodsInfo)
{
GetType().GetMethod(methodInfo.Key).Invoke(this, methodInfo.Value);
}
如果方法在另一个类中,则可以像这样调用它们
Type classType = Type.GetType("namespace.className");
object classObject = classType.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
foreach (KeyValuePair<string, object[]> methodInfo in methodsInfo)
{
classType.GetMethod(methodInfo.Key).Invoke(classObject, methodInfo.Value);
}
注意:GetConstructor(Type.EmptyTypes)
用于空构造函数,对于参数化构造函数(比如int
)请使用GetConstructor(new[] { typeof(int) }).Invoke(new object[] { 3 }