调用函数时是否可以创建类模板并选择C#属性?
是否有人知道是否可以将以下对象列表传递给函数,并指定函数应在其处理的每个对象中使用哪个属性 我有一个类在整个类中处理对象的特定属性,但我不想创建同一个类的多个副本来处理该对象的不同属性。我曾考虑过使用Linq,但我没有找到一种方法来指定在操纵类的其他函数中使用哪个属性 我想应该有一种更优雅的方法来实现这一点,而不是创建同一个类来处理每个属性。我曾考虑过使用反射来告诉函数使用哪个属性,但很快就会变得很糟糕 psuedo代码示例:调用函数时是否可以创建类模板并选择C#属性?,c#,templates,C#,Templates,是否有人知道是否可以将以下对象列表传递给函数,并指定函数应在其处理的每个对象中使用哪个属性 我有一个类在整个类中处理对象的特定属性,但我不想创建同一个类的多个副本来处理该对象的不同属性。我曾考虑过使用Linq,但我没有找到一种方法来指定在操纵类的其他函数中使用哪个属性 我想应该有一种更优雅的方法来实现这一点,而不是创建同一个类来处理每个属性。我曾考虑过使用反射来告诉函数使用哪个属性,但很快就会变得很糟糕 psuedo代码示例: class Store { int amount; in
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
}
类存储
{
整数金额;
int-id;
int系列;
}
类聚合方法
{
bool有3个值(列出places/*一些其他参数以指定要使用的属性*/)
{
//使用Store.amount或Store.id执行某些操作
}
//使用Store.amount或Store.id或Store.serial的其他功能
}
在您的例子中,它们都是int
值-因此您可以保留一个Func
或将其传递到每个方法中。如果您需要处理多个类型,它会变得稍微困难一些,但是我们没有足够的信息来进一步评论
还不清楚您是否期望两个聚合方法有多个实例(例如,一个用于金额,一个用于ID等),或者它们是否真的是静态方法。如果您使用的是实例,那么可以将投影作为成员变量,并在每个方法中应用它
值得注意的是,您给定的属性可能对应用相同的聚合没有实际意义-例如,虽然求和金额有意义,但对ID求和没有意义。在您的情况下,它们都是
int
值-因此您可以保留函数或将其传递到每个方法中。如果您需要处理多个类型,它会变得稍微困难一些,但是我们没有足够的信息来进一步评论
还不清楚您是否期望两个聚合方法有多个实例(例如,一个用于金额,一个用于ID等),或者它们是否真的是静态方法。如果您使用的是实例,那么可以将投影作为成员变量,并在每个方法中应用它
值得注意的是,您提供的属性可能对应用相同的聚合没有实际意义-例如,虽然对金额求和有意义,但对ID求和没有意义。Jon!谢谢你的回复。我只是编了那个代码来说明我的观点。我并不是真的在做聚合,但我确实需要让一个类操纵另一个类的属性值。不要被这些名字所纠缠,因为它们是任意的。函数名是随机的,我基本上有一个类,我用它来操作Store类的一个成员。我有大约8个函数操作特定的存储类成员。我希望AggregatorMethods类有多个实例。@AriesOntheHorizon:一如既往,获得有用答案的关键之一是提供一个相关的示例:)听起来您可能想使AggregationMethods
通用,在构造函数中使用Func
,其中,T
是投影结果的类型。我希望这会有帮助,但如果没有,请提供一个更具体、更现实的例子,我会看看我能做些什么。乔恩!谢谢你的回复。我只是编了那个代码来说明我的观点。我并不是真的在做聚合,但我确实需要让一个类操纵另一个类的属性值。不要被这些名字所纠缠,因为它们是任意的。函数名是随机的,我基本上有一个类,我用它来操作Store类的一个成员。我有大约8个函数操作特定的存储类成员。我希望AggregatorMethods类有多个实例。@AriesOntheHorizon:一如既往,获得有用答案的关键之一是提供一个相关的示例:)听起来您可能想使AggregationMethods
通用,在构造函数中使用Func
,其中,T
是投影结果的类型。我希望这能有所帮助,但如果没有,请提供一个更具体、更现实的例子,我会看看我能做些什么。