我有一个第三方应用程序,为对象提供了许多“属性”,它们是简单的(字符串)键和值对.值类型可以是字符串,DateTime,Int32或Int64.
我需要创建我自己的类来表示这个对象,方便的方式.我正在创建一个向客户端提供此对象的WCF服务,所以我需要它非常简单和干净.
属性的键将作为客户端的枚举显示(隐藏第三方应用程序的特定密钥字符串的信息).但是,我不知道如何表示值.以下是一些选项:
选项1:每个属性值有不同的集合,看起来很丑,但是很容易让客户使用
public class MyObject { public Dictionary<MyTextAttributeKeysEnum,string> TextAttributes { get; set; } public Dictionary<MyDateAttributeKeysEnum,DateTime> DateAttributes { get; set; } public Dictionary<MyNumAttributeKeysEnum,long> NumericAttributes { get; set; } public string Name { get; set; } public string Id{ get; set; }
选项2:将所有属性转换为字符串
public class MyObject { public Dictionary<MyAttributeKeysEnum,string> MyAttributes { get; set; } public string Name { get; set; } public string Id{ get; set; }
选择3:将它们保持为对象,让客户打扰铸造和转换
public class MyObject { public Dictionary<MyAttributeKeysEnum,object> MyAttributes { get; set; } public string Name { get; set; } public string Id{ get; set; }
解决方法
使用几个字典只是看起来不太好:)但可能会在某些情况下工作.
如果你绝对确定这个字符串对于所有的字符串都是足够的 – 用字符串去.但是如果一些其他代码需要解析它 – 这将是昂贵的.
如果你想要一个非常简单的直接解决方案 – 只需要与对象.即使它会为价值类型引入拳击/拆箱(如果您不操作数千个对象,请忘记它),并且您将丢失关于值的类型信息,此解决方案仍然可以正常工作.
还可以考虑为值引入中间类.就像是
public Dictionary<MyAttributeKeysEnum,PropertyBagValue> MyAttributes { get; set; } public class PropertyBagValue { public object AsObject { get; set; } public string AsString { get; set; } public int AsInt { get; set; } // ... }
在内部你可以将你的值存储在一个原始类型的变量中(int在一个int变量中,一个字符串变量中的字符串等),即每个类型都有一个单独的变量),然后可以避免类型转换.还可以将您的字典包装在另一个类中,添加一些有用的访问器,并使其看起来更好.我不知道这适合你的基础设施.