我有一个第三方应用程序,为对象提供了许多“属性”,它们是简单的(字符串)键和值对.值类型可以是字符串,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变量中,一个字符串变量中的字符串等),即每个类型都有一个单独的变量),然后可以避免类型转换.还可以将您的字典包装在另一个类中,添加一些有用的访问器,并使其看起来更好.我不知道这适合你的基础设施.
原文地址:https://www.jb51.cc/csharp/96867.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。