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

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

概述我有一个第三方应用程序,为对象提供了许多“属性”,它们是简单的(字符串)键和值对.值类型可以是字符串,DateTime,Int32或Int64. 我需要创建我自己的类来表示这个对象,方便的方式.我正在创建一个向客户端提供此对象的WCF服务,所以我需要它非常简单和干净. 属性的键将作为客户端的枚举显示(隐藏第三方应用程序的特定密钥字符串的信息).但是,我不知道如何表示值.以下是一些选项: 选项1:每 我有一个第三方应用程序,为对象提供了许多“属性”,它们是简单的(字符串)键和值对.值类型可以是字符串,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变量中,一个字符串变量中的字符串等),即每个类型都有一个单独的变量),然后可以避免类型转换.还可以将您的字典包装在另一个类中,添加一些有用的访问器,并使其看起来更好.我不知道这适合你的基础设施.

总结

以上是内存溢出为你收集整理的c# – 在课堂上代表类型安全的物业包的最好方式是什么?全部内容,希望文章能够帮你解决c# – 在课堂上代表类型安全的物业包的最好方式是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1236915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存