代码之家  ›  专栏  ›  技术社区  ›  Dan Tao

把财产放进字典里是个好主意吗?

  •  0
  • Dan Tao  · 技术社区  · 16 年前

    假设我有一个类,它有几个对应于用户定义参数的属性,例如:

    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; }
    

    我知道这看起来很可疑,而且有更干净的方法来处理 一般的 不能 似乎我的头周围是如何提供完整的理想功能,在一个容易维护的方式。

    所需的功能是:能够显示选定实例的所有用户定义参数,选择要复制的属性,并仅将这些选定属性的值从一个实例复制到另一个实例。通过为这些属性使用可枚举接口,这变得非常简单——添加一个新参数就像将其添加到字典中一样简单。否则,如果不使用反射,我很难看到它。

    想想看,也许我应该用一个强类型的数据集来处理这一切。。。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Oren Mazor    16 年前

    实际上我从未这样做过,但我可以想象您可以使用反射的GetProperties()迭代类的属性。

    它为您提供了一个要使用的PropertyInfo对象数组。

    http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.aspx

    编辑:刚刚注意到“没有反射”的一点。为什么没有反省?如果没有任何硬限制,这可能比复杂的多字典解决方案要好。。

        2
  •  0
  •   Stefan Steinegger    16 年前

    如果有的话 真正地

    假设这些属性没有任何特定的内容,我实际上也会考虑一种更通用的方法来处理这个问题,您的建议也不是那么糟糕——即使它是非常规的。但拥有数百套房产也很不传统。

        3
  •  0
  •   m3kh    16 年前

    如果我能完全理解您的意思,我认为最好使用参数定义集合。像这样的:

    public class ParameterInfo : IClonabe
    {
        public string ParameterName { get; set; }
        public Type ParameterType { get; set; }
        public object Value { get; set; }
    }
    

    还有另一类:

    public class UserParameters : IClonabe
    {
        public IEnumerable<ParameterInfo> Parameters { get; set; }
    }