【发布时间】:2015-01-13 19:10:00
【问题描述】:
我有一堆从 XSD 生成的枚举。它们具有如下格式(带有名称但不带有数值的枚举):
public enum MyEnum
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("001")]
Item001,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("002")]
Item002,
.... // etc.
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("199")]
Item199,
}
我想要一种简单的方法来重构它们,如下所示:
public enum MyEnum
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("001")]
Item001 = 1,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("002")]
Item002 = 2,
.... // etc.
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("199")]
Item199 = 199,
}
我需要这个来将整数值(来自配置文件或数据库)解析为枚举值。请注意,所需的 int 值既可以在 XmlEnumAttribute 中找到,也可以在枚举值名称本身中找到 - 只是不是数字值。
任何快速执行此重构的想法将不胜感激。
示例和额外背景信息:
我想做:
var myEnumValue = (MyEnum) integerFromDb;
我意识到我可以通过创建一个方法来解决这个问题,该方法将每条数据的 int 值附加到字符串 Item,并使用结果名称将其解析为枚举,但这有几个弱点:
- 感觉像一个肮脏的黑客
- 对于
MyEnum.Item02和MyOtherEnum.Item002之类的名称可能无法正常工作 - 它不允许我使用在我的系统之外定义的整数值来引用枚举值(即,这不符合我的枚举所基于的 XSD 中的规则)。
【问题讨论】:
标签: c# xml enums refactoring automated-refactoring