2015-05-22 3 views
1

У меня есть несколько методов, некоторые с дополнительными параметрами и некоторые без каких-либо. Как я могу вызвать эти методы, только имея имя функции в виде строки?Вызов метода с необязательными параметрами из строки

В настоящее время у меня есть это:

public Method method = Method.QuickSort;  
public enum Method 
{ 
    BubbleSort, 
    MergeSort, 
    QuickSort, 
    InsertionSort, 
    RadixSortLSD, 
    CocktailSort, 
    CombSort, 
    OddEvenSort 
} 

MethodInfo mi = this.GetType().GetMethod(method.ToString()); 
mi.Invoke(this, null); 

Таким образом, это все работает отлично, до тех пор пока у меня есть функция с дополнительным параметром .. Путь я «фиксированный» его, как это:

try 
{ 
    mi.Invoke(this, null); 
} 
catch 
{ 
    try 
    { 
     mi.Invoke(this, new object[] { Type.Missing }); 
    } 
    catch 
    { 
     try 
     { 
      mi.Invoke(this, new object[] { Type.Missing, Type.Missing }); 
     } 
     catch 
     { 
      mi.Invoke(this, new object[] { Type.Missing, Type.Missing, Type.Missing }); 
     } 
    } 
} 

Но это ужасное «решение», очевидно. ? Так что мой вопрос, как я могу создать функциональные возможности, которые мне нужно (вызов метода по имени строки с дополнительным PARAMATERS)

+0

Я не» Посмотрите, как это сделать, по сравнению с предоставлением интерфейса и присваиваемых реализаций вашего алгоритма сортировки. – ckruczek

ответ

3

Вы можете определить количество параметров от MethodInfo:

MethodInfo mi = this.GetType().GetMethod("name"); 
mi.Invoke(this, mi.GetParameters().Select(p => Type.Missing).ToArray()); 
Смежные вопросы