是否可以在调用函数时创建类模板并选择C#属性?

时间:2012-05-29 18:11:20

标签: c# templates

是否有人知道以下是否可以传入List<>对象的函数,并指定函数应该在其使用的每个对象中使用哪个属性?

我有一个类在整个类中使用对象的特定属性,但我不想创建同一个类的多个副本来处理该对象的不同属性。我想过使用Linq,但我没有看到一种方法来指定在操作类的其他函数中使用哪个属性。

我认为必须有一种更优雅的方式来实现这一点,而不是创建相同的类来处理每个属性。我想过使用Reflection来告诉函数哪个属性可以使用但是很快就会变得难看

psuedo代码示例:

class Store
{
   int amount;
   int id;
   int serial;
}

class AggregationMethods
{
   bool Has3Values( List<Store> places /* some other param to specify which property to use*/)
   {
      // do something with Store.amount or Store.id
   }

   // other functions to work with Store.amount or Store.id or Store.serial

}

1 个答案:

答案 0 :(得分:3)

在您的情况下,它们都是int个值 - 因此您可以保留Func<Store, int>或将其传递给每个方法。如果你需要处理多种类型,它会变得稍微困难​​,但我们没有足够的信息来进一步评论。

还不清楚你是否会期望两个有AggregationMethods的多个实例(例如一个用于金额,一个用于ID等)或者这些是否真的是静态方法。如果您正在使用实例,那么您可以将投影保留为成员变量,并将其应用于每个方法中。

值得注意的是,你给出的属性可能对应用相同的聚合没有多大意义 - 例如,虽然求和量是有意义的,但总结ID是没有意义的。