使用未知对象类型?

时间:2012-11-26 02:20:06

标签: c# .net

我想获得一列的平均值。我可以像以下一样工作:

           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]等数据,但是如果不使用上面的强类型示例就找不到访问这些数据的方法。有什么想法吗?

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的)。