从字符串调用带有可选参数的方法
Calling a method with optional parameters from a string
我有多种方法,有些有可选参数,有些没有。如何仅通过将函数名称作为字符串来调用这些方法?
目前我有这个:
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);
所以,这一切都很好,直到我有了一个带有可选参数的函数。我 "fixed" 它的方式是这样的:
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 });
}
}
}
但这显然很糟糕 "solution"。所以我的问题是,我如何创建我需要的功能?(通过带有可选参数的字符串名称调用方法)
您可以从 MethodInfo
:
中确定参数的数量
MethodInfo mi = this.GetType().GetMethod("name");
mi.Invoke(this, mi.GetParameters().Select(p => Type.Missing).ToArray());
我有多种方法,有些有可选参数,有些没有。如何仅通过将函数名称作为字符串来调用这些方法?
目前我有这个:
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);
所以,这一切都很好,直到我有了一个带有可选参数的函数。我 "fixed" 它的方式是这样的:
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 });
}
}
}
但这显然很糟糕 "solution"。所以我的问题是,我如何创建我需要的功能?(通过带有可选参数的字符串名称调用方法)
您可以从 MethodInfo
:
MethodInfo mi = this.GetType().GetMethod("name");
mi.Invoke(this, mi.GetParameters().Select(p => Type.Missing).ToArray());