【发布时间】:2010-12-11 06:46:00
【问题描述】:
假设我有一个类有几个属性对应用户定义的参数,比如:
bool StepUpHedge { get; set; }
bool PullOnJump { get; set; }
bool PullOnCross { get; set; }
double MaxStockSpread { get; set; }
double MaxHedgeSpread { get; set; }
(这些只是示例,不是真正的代码,无论如何它们的含义并不重要。)
现在,假设实际上有几十个甚至数百个这些用户定义的参数。处理保存/加载和(最重要的是)将所有或部分从类的一个实例复制到另一个实例可能非常麻烦。
显然,我不想只创建一个 Dictionary<Parameter, object> 来存储它们(类型安全?拳击?那是什么?),但是能够枚举会很好越过它们(没有反射),这让我想知道......
如果我制作了几本字典会怎样:
public enum BoolParameter { /*...*/ }
public enum DoubleParameter { /*...*/ }
public enum IntParameter { /*...*/ }
Dictionary<BoolParameter, bool> BoolParameters { get; set; }
Dictionary<DoubleParameter, double> DoubleParameters { get; set; }
Dictionary<IntParameter, int> IntParameters { get; set; }
我知道这看起来很可疑,并且有更简洁的方法来处理 general 中的属性(例如,通过将它们子类化为逻辑组);但我似乎无法想到的是如何以易于维护的方式提供所需的全部功能。
所需的功能是:能够显示选定实例的所有用户定义参数,选择要复制的属性,以及仅将那些选定属性的值从一个实例复制到另一个实例。通过为这些属性使用可枚举的接口,这变得非常简单——添加新参数就像将其添加到字典中一样简单。否则,如果不使用反射,我很难看到它。
想一想,也许我应该为所有这些使用强类型数据集...
【问题讨论】:
-
为什么没有反思?您可以将属性添加到给定的属性,并结合反射枚举它们。
-
我同意 Am - 反射“慢”,但只有在创建或复制数百/数千个对象时才会真正出现。
标签: .net dictionary properties