微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在课堂上代表类型安全的物业包的最好方式是什么?

我有一个第三方应用程序,为对象提供了许多“属性”,它们是简单的(字符串)键和值对.值类型可以是字符串,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 举报,一经查实,本站将立刻删除。

相关推荐