我想获得一列的平均值。我可以像以下一样工作:
IEnumerable results = defaultView.Select(args);
Decimal amount = results.Cast<Fees>().Average(x => x.Fee);
其中results是System.Collections.Generic.List`1对象的集合。但是,结果并不总是相同的对象,因为可能会返回其他内容。
它总是在x对象的结构中,每个对象有5-10个值。
我希望有一种通用的方法来迭代结果[0] [2]等数据,但是如果不使用上面的强类型示例就找不到访问这些数据的方法。有什么想法吗?
答案 0 :(得分: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;}
}
答案 1 :(得分:2)
如果您需要在可能包含不同类型对象的集合中迭代某些类型的对象(例如Fees
),请尝试使用:Enumerable.OfType Method 。
IEnumerable results = defaultView.Select(args);
Decimal amount = results.OfType<Fees>().Average(x => x.Fee);
来自MSDN:
Enumerable.OfType方法
根据指定的类型过滤IEnumerable的元素。
OfType(IEnumerable)方法仅返回那些元素 可以强制转换为TResult类型的源代码。而是收到一个 如果一个元素无法转换为类型TResult,则使用异常 铸(IEnumerable的)。