C# 使用字符串中的可选参数调用方法

C# 使用字符串中的可选参数调用方法,c#,.net,methods,invoke,optional-parameters,C#,.net,Methods,Invoke,Optional Parameters,我有多种方法,有些带有可选参数,有些没有。我如何通过仅将函数名作为字符串来调用这些方法 目前我有: public Method method = Method.QuickSort; public enum Method { BubbleSort, MergeSort, QuickSort, InsertionSort, RadixSortLSD, CocktailSort, CombSort, OddEvenSort }

我有多种方法,有些带有可选参数,有些没有。我如何通过仅将函数名作为字符串来调用这些方法

目前我有:

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 });
        }
    }
}

但显然,这是一个可怕的“解决方案”。因此,我的问题是,如何创建所需的功能?(通过带有可选参数的字符串名调用方法)

您可以从
MethodInfo
中确定参数的数量:

MethodInfo mi = this.GetType().GetMethod("name");
mi.Invoke(this,  mi.GetParameters().Select(p => Type.Missing).ToArray());

相比之下,我不认为这样做是为了提供一个接口和适当的排序算法实现。