我需要編寫一些我稱之爲Aggregation Container的存儲Aggregations的內容,這些Aggregation本質上是Actions,它將一組對象作爲結果輸出並輸出一個對象。聚合的例子是:算術平均值,一組數字的中間值,諧波平均值等。下面是一個示例代碼。聚合以及如何檢查我們是否可以求和對象
var arithmeticMean = new Aggregation
{
Descriptor = new AggregationDescriptor { Name = "Arithmetic Mean" },
Action = (IEnumerable arg) =>
{
double count = 0;
double sum = 0;
foreach (var item in arg)
{
sum += (double)item;
count++;
}
return sum/count;
}
};
這是我的代碼問題。我認爲這些物體只是雙倍,因此進行了轉換。如果他們不是雙倍的呢?我怎樣才能確保我被允許總結兩個對象?標準.Net程序集中是否有某種接口?我需要一些類似於ISummable的東西......或者我需要自己實現它(然後我將不得不包裝所有基本類型,如double,int等等來支持它)。
任何有關此類功能設計的建議都將有所幫助。
的問題不在於你需要確定一個集合是否「可以和」。所有的數值都是固有的。你應該問的問題是「是否是一組數字?」。您可以嘗試爲不同的數值類型提供強類型的「Action」變體,或者在'arg'上運行。 – Jon
喬恩,謝謝你的回覆。我知道,我給出的例子都是數字...但我真的想寫一些更通用和有用的東西。我不想在那裏寫一堆運行時間轉換,但是我建議一組具有不同類型參數的動作可以在這裏工作...... –
看看Enumerable方法 - 它有一組通用方法,支持:'Sum,Sum ,Sum ,Sum >''這是使類型參數爲'可以和'的唯一方法 –