5

リアルタイムデータを取得し、ユーザー入力に応じてそこから多くの機能を抽出するソフトウェアを開発しています。使用可能な各機能は、double の配列を取り、必要な機能を返す 1 つのメソッドで構成されます。たとえば、次の MeanAbsoluteValue の場合です。

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

それぞれの機能には Calculate メソッドが 1 つしかないので、コレクションから収集して選択できるように書き直そうと考えていました。

私は彼らが使用するためのインターフェースを書き込もうとしましたが、それらは静的であるため、これは許可されませんでした。

これを行う方法はありますか?もしそうなら、正しい方向に私を向けることができますか?

4

3 に答える 3

8

Calculate次のように、これらのクラスのメソッドから構築されたデリゲートの配列を作成できます。

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

これはideoneのデモです。

于 2013-04-15T14:06:12.433 に答える
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);
 }
于 2013-04-15T14:09:54.810 に答える
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,});
}
于 2013-04-15T14:08:51.370 に答える