0

我想得到一列的平均值。我可以让它像这样工作:

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

其中 results 是 System.Collections.Generic.List`1 对象的集合。但是结果并不总是相同的对象,因为可能会返回其他内容。

它总是在 x 个对象的结构中,每个对象有 5-10 个值。

我希望有一种通用的方法来迭代数据,例如 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 回答