我正在开发一种采用实时数据的软件,并根据用户输入从中提取许多功能。每个可用的功能都包含一个方法,该方法获取双精度数组并返回所需的特征,例如MeanAbsoluteValue的这个:
public static class MeanAbsoluteValue{
public static double Calculate(double[] data){
return data.Sum(s => Math.Abs(s)) / data.Length;
}
}
由于每个功能只有一个Calculate方法,我正在考虑重写它们,以便可以从该Collection中收集和选择它们。
我曾尝试编写一个接口供他们使用,但由于它们是静态的,所以不允许这样做。
有没有办法做到这一点?如果是这样,你能指出我正确的方向吗?
答案 0 :(得分:8)
您可以创建一个由这些类的Calculate
方法构造的委托数组,如下所示:
Func<double[],double>[] array = new Func<double[],double>[] {
MeanAbsoluteValue.Calculate
, MeanValue.Calculate
, Deviation.Calculate
// ...and so on
};
答案 1 :(得分:2)
将代表存储到字典中的函数中,并按名称查找
var methods = new Dictionary<string, Func<double[], double>>();
methods.Add("MeanAbsoluteValue", MeanAbsoluteValue.Calculate);
...
public double DoFunc(string name, double [] args)
{
var func = methods[name];
return func(args);
}
答案 2 :(得分:0)
只有一个Func的集合......
var list = new List<Func<double[], double>(MeanAbsoluteValue.Calculate, Average.Calculate)
var accum = 0;
foreach(var func in list)
{
accum += func(new [] {1,3,4,});
}