相关疑难解决方法(0)

获得Enum价值的属性

我想知道是否可以获取枚举值的属性而不是枚举本身的属性?例如,假设我有以下枚举:

using System.ComponentModel; // for DescriptionAttribute

enum FunkyAttributesEnum
{
    [Description("Name With Spaces1")]
    NameWithoutSpaces1,    
    [Description("Name With Spaces2")]
    NameWithoutSpaces2
}
Run Code Online (Sandbox Code Playgroud)

我想要的是枚举类型,产生2元组的枚举字符串值及其描述.

价值很容易:

Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
    Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
Run Code Online (Sandbox Code Playgroud)

但是如何获取描述属性的值,以填充Tuple.Desc?如果属性属于枚举本身,我可以想到如何做到这一点,但我不知道如何从枚举的值中获取它.

c# reflection enums .net-attributes

453
推荐指数
9
解决办法
27万
查看次数

大型Switch语句:糟糕的OOP?

我一直认为大型开关语句是糟糕的OOP设计的症状.在过去,我阅读了讨论这个主题的文章,他们提供了基于OOP的基于OOP的方法,通常基于多态来实例化处理案例的正确对象.

我现在处于一种基于来自TCP套接字的数据流的怪异切换语句的情况,其中该协议基本上由换行符组成,后跟数据行,后跟结束标记.该命令可以是100个不同命令之一,因此我想找到一种方法将这个怪物切换语句减少到更易于管理的状态.

我已经做了一些谷歌搜索,以找到我记得的解决方案,但遗憾的是,谷歌如今已成为各种查询无关结果的荒地.

这类问题有什么模式吗?有关可能实施的任何建议?

我有一个想法是使用字典查找,将命令文本与要实例化的对象类型相匹配.这具有仅仅创建新对象并在表中为任何新命令插入新命令/类型的优点.

但是,这也存在类型爆炸的问题.我现在需要100个新类,而且我必须找到一种方法将它们干净地连接到数据模型."一个真正的开关声明"真的是要走的路吗?

我很感激你的想法,意见或评论.

c# oop design-patterns

75
推荐指数
3
解决办法
2万
查看次数

为Enums提供本地化的最佳方式是什么?

我正在编写一个使用很多枚举的多语言应用程序,我希望实现以下目标:

  1. 将枚举名称显示为本地化字符串
  2. 使用属性提供本地化描述
  3. 启用对枚举的语言敏感解析回到int值

我热衷于使用属性+资源文件来修饰枚举,以便可以从运行时类型信息中访问本地化字符串.在使用静态成员而不是枚举声明静态类之前,我一直沿着这条路走下去,但是这解决了很多问题.

某种基于TypeDescriptor的机制是否合适?甚至可能吗?

此外 - 如何以干净,通用,可重复使用的方式完成目标#3?


自从提出这个问题以来,我已经完成了需要可本地化的枚举显示的开源库.我选择了实现TypeConverters的技术.完整资料来源于http://measures.codeplex.com/

c# enums localization internationalization

6
推荐指数
1
解决办法
6431
查看次数