gpt4 book ai didi

c# - 一种重构枚举以包含数值的简单方法?

转载 作者:行者123 更新时间:2023-11-30 22:01:13 25 4
gpt4 key购买 nike

我有一堆从 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.Item02MyOtherEnum.Item002 等名称可能无法正常工作
  • 它不允许我使用在我的系统之外定义的整数值来引用枚举值(即,这不符合我的枚举所基于的 XSD 中的规则)。

最佳答案

您可以使用 Visual Studio 的搜索和替换功能轻松完成此操作(注意……我在这里假设 VS2013,它使用标准的 .NET regex 语法;早期版本的 VS 也可以执行此操作,但它们使用自定义正则表达式语法,如果需要,您可以自己查找):

  1. 打开源文件。确保每个枚举值声明相同;特别是,即使在最后一个之后也要加一个逗号。
  2. Ctrl+H 显示搜索和替换 UI
  3. 输入Item(\d+),作为您要查找的文本,并且 Item$1 = $1,作为替换文本。
  4. 确保范围设置为“当前文档”。
  5. Alt+A。这将替换文件中的所有匹配项。

这实际上足以让代码按照您的意愿进行编译。但您可能更愿意删除前导 0数字。您可以再次使用搜索和替换来执行此操作:

  1. 输入= 0作为要查找的文本,= 作为替换文本。
  2. Alt+A 两次(因为您最多有两个前导零)

最后:就您仅在运行时处理它的想法而言,考虑到对名称确切格式的依赖,通过值名称进行转换确实存在潜在问题。但请注意,这里有一个真正的可解析整数,在 [XmlEnum] 中。属性。

因此,如果您想为转换创建必要的字典(您不想继续检查属性本身,因为反射),您可以通过反射枚举枚举类型,得到每个值的属性,解析在XmlEnumAttribute.Name中找到的字符串属性,并使用它来创建字典条目,即在 Dictionary<int, MyEnum> 中和 Dictionary<MyEnum, int>以促进任一方向的转换。

关于c# - 一种重构枚举以包含数值的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com