嗯,一直在寻找这个,但由于我不能更具体,谷歌似乎没有答案,所以我决定在这里问。
无论如何要创建一个返回值的方法数组?
像
methodArray[0].Invoke();
我可以使用委托吗?如果是这样,怎么样?
就好像我有2个方法需要相同的参数
dobule Add(double number)
{
//code
}
double Remove(double number)
{
//code
}
我需要做什么才能用索引调用它们(我不想处理switch语句)
答案 0 :(得分:3)
您可以创建Func
的数组。但是,这仅限于所有具有相同签名的方法(返回类型,数量和参数类型)。
如果您有多种方法不接受任何参数,您可以像这样使用它:
var methods = new List<Func<T>>();
其中T是返回值中的最低公共对象,可能只是object
。
var methods = new List<Func<object>>();
如果您只想调用void
方法,或者不担心返回类型,则可以改为使用Action
:
var methods = new List<Action>();
无论哪种方式,您都可以这样调用它们:
foreach(var method in methods){
var result = method();
//or if you don't care about return type
method();
}
您可能还会发现此帖子很有用:How do you use Func<> and Action<> when designing applications?
<强>已更新强>
以下示例显示了如何将此技术用于Add
和Remove
方法:
public double Add(double number) { return 0;}
public double Remove(double number) { return 0; }
public void Example()
{
//Array of methods
var methods = new Func<double, double>[]
{
n => Add(n),
n => Remove(n)
};
//Invoking methods
var number = 0d;
foreach (var method in methods)
{
method(number);
}
}