0

列の平均を取得したいと考えています。次のように動作させることができます:

           IEnumerable results = defaultView.Select(args);
           Decimal amount = results.Cast<Fees>().Average(x => x.Fee);

ここで、results は System.Collections.Generic.List`1 オブジェクトのコレクションです。ただし、別のものが返される可能性があるため、結果は常に同じオブジェクトとは限りません。

これは常に、それぞれ 5 ~ 10 個の値を持つ x オブジェクトの構造になっています。

results[0][2] などのデータを反復する一般的な方法を望んでいましたが、上記の厳密に型指定された例を使用せずにこのデータにアクセスする方法を見つけることができません。何か案は?

4

2 に答える 2

4

最善の策は、異なるクラス間で共有されるプロパティのインターフェイスを作成することです。

public interface IHasFee
{
  decimal Fee {get;}
}

次に、Fee プロパティを持つすべてのクラスにこのインターフェイスを適用できます。

public class Fees : IHasFee
{
  public decimal Fee {get;set;}
}


public class Charge : IHasFee
{
  public decimal Fee {get;set;}
}
于 2012-11-26T02:25:32.747 に答える
2

Fees異なるタイプのオブジェクトを含む可能性があるコレクション内の特定のタイプ (たとえば、) のオブジェクトを反復処理する必要がある場合は、次を使用してみてください: Enumerable.OfType メソッド

IEnumerable results = defaultView.Select(args);
Decimal amount = results.OfType<Fees>().Average(x => x.Fee);

MSDN から:

Enumerable.OfType メソッド

指定された型に基づいて IEnumerable の要素をフィルター処理します。

OfType(IEnumerable) メソッドは、ソース内で TResult 型にキャストできる要素のみを返します。要素を TResult 型にキャストできない場合に代わりに例外を受け取るには、Cast(IEnumerable) を使用します。

于 2012-11-26T02:23:20.930 に答える