Вызывать методы с разными параметрами

Я сталкиваюсь с одной проблемой в вызове различных методов, которые имеют разные типы параметров. Например, У меня есть 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 }

Другие вопросы по тегам