我的代码以非常直接的方式向Guid反映了enum(DictionaryType)选项
if (dictionaryType == DictionaryType.RegionType)
return Consts.DictionaryTypeId.RegionType;
if (dictionaryType == DictionaryType.Nationality)
return Consts.DictionaryTypeId.Nationality;
请建议我将Enum选项反映到静态只读guid值的最佳方法。
提前谢谢
稍后编辑: 我无法为枚举选项分配任何属性,'cos枚举在数据模型程序集中声明,枚举不应与实现相结合(Guids,Tables ...)
答案 0 :(得分:1)
一些简单的选择:
Dictionary<DictionaryType, Guid>
(如果你真的想要, 可以通过反射来填充)答案 1 :(得分:1)
除了Jon的答案之外,您还可以在单独的类中将Guids作为字段提供,其中字段与其对应的枚举值具有相同的名称。
这可用于填充字典以便以后快速查找:
using System;
using System.Collections.Generic;
namespace SO2856896
{
enum DictionaryType
{
RegionType,
Nationality
}
class Consts
{
public class DictionaryTypeId
{
public static Guid RegionType = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D");
public static Guid Nationality = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309E");
}
}
class Program
{
static void Main(string[] args)
{
Dictionary<DictionaryType, Guid> table = new Dictionary<DictionaryType, Guid>();
Type idType = typeof(Consts.DictionaryTypeId);
foreach (DictionaryType dicType in Enum.GetValues(
typeof(DictionaryType)))
{
System.Reflection.FieldInfo field = idType
.GetField(dicType.ToString(),
System.Reflection.BindingFlags.Static
| System.Reflection.BindingFlags.Public);
Guid guid = (Guid)field.GetValue(null);
table[dicType] = guid;
}
foreach (DictionaryType dicType in Enum.GetValues(
typeof(DictionaryType)))
{
Console.Out.WriteLine(dicType + ": " + table[dicType]);
}
}
}
}
输出:
RegionType: 21ec2020-3aea-1069-a2dd-08002b30309d
Nationality: 21ec2020-3aea-1069-a2dd-08002b30309e
我不完全确定我会选择自己,但也许是Jon的回答,一个查找指南的字典和上面的反射来填充它。