Вызывать методы с разными параметрами
Я сталкиваюсь с одной проблемой в вызове различных методов, которые имеют разные типы параметров. Например, У меня есть 3 метода A, B, C с параметрами следующим образом.
A(string text, int num)
B(bool type, int num2)
C(string text2, boolean type2, int num3)
Теперь, как вызвать эти три метода один за другим? Имена методов извлекаются в виде строки и сохраняются в массиве, и после их сохранения необходимо вызывать методы с помощью цикла For Each.
1 ответ
Вы можете держать в 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 }