声明静态类,以便它们可以存储在List中

时间:2013-04-15 14:03:21

标签: c#

我正在开发一种采用实时数据的软件,并根据用户输入从中提取许多功能。每个可用的功能都包含一个方法,该方法获取双精度数组并返回所需的特征,例如MeanAbsoluteValue的这个:

public static class MeanAbsoluteValue{
    public static double Calculate(double[] data){
        return data.Sum(s => Math.Abs(s)) / data.Length;
    }
}

由于每个功能只有一个Calculate方法,我正在考虑重写它们,以便可以从该Collection中收集和选择它们。

我曾尝试编写一个接口供他们使用,但由于它们是静态的,所以不允许这样做。

有没有办法做到这一点?如果是这样,你能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:8)

您可以创建一个由这些类的Calculate方法构造的委托数组,如下所示:

Func<double[],double>[] array = new Func<double[],double>[] {
    MeanAbsoluteValue.Calculate
,   MeanValue.Calculate
,   Deviation.Calculate
//  ...and so on
};

这是demo on ideone

答案 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,});
}