@iRumba

Как передать в функцию переменное число параметров разного типа?

Здравствуйте, уважаемые знатоки. Есть ряд методов (или функций, это не имеет значения).
void M1(int i)
{
//какой то код
}

void M2(int i,string s)
{
//какой то код
}

void M3(int i,string s, char c)
{
//какой то код
}


мне надо описать функцию, которая бы вызывала нужный мне метод. Возможно, потребуется 3 функции (для каждого количества параметров), но тип параметров может различаться.

Обращение к функции должно происходить примерно так

MyFunc(M2, 5, "строка");

и функция должна запустить метод 2 с параметрами 5 и "строка", но типов параметров метода она не знает, потому что должна уметь обратиться к какому нибудь методу M4(string s, double d)
Конечно, с такими же параметрами метод М4 выдаст ошибку, но это уже беда программиста
  • Вопрос задан
  • 448 просмотров
Решения вопроса 1
lasalas
@lasalas
.NET Architect
void MyFunc(string func, params object[] args)
{
        var argTypes = Type.GetTypeArray(args);
        var methodInfo = this.GetType().GetMethod(func, argTypes);
        methodInfo.Invoke(this, args);
}
        ...
        MyFunc("M2", 5, "строка");
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@bmforce
Как-то так должно сработать, если все методы находятся в одном классе.
public void MyFunc(string methodName, params object[] list) 
{
     MethodInfo mi = this.GetType().GetMethod(methodName);
     mi.Invoke(this, list);
}
Ответ написан
artem_b89
@artem_b89
Сетевой бездельник
думаю вполне достаточно сделать так
void M(int i)
{
//какой то код
}

void M(int i,string s)
{
//какой то код
}

void M(int i,string s, char c)
{
//какой то код
}

Также прочитайте про params https://msdn.microsoft.com/ru-ru/library/w5zay9db.aspx, значения по умолчанию и именованные аргументы
Ответ написан
ImmortalCAT
@ImmortalCAT
C# loving
А с конвертацией пробовали?
void M ( int I , long l, string s, double d)
{
var str = i.ToString();
var into = Convert.ToInt32(s); // Int.Parse(s);
var doubledee = Convert.ToDouble(I);
var longesttt = Convert.ToInt64(d);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы