使用属性来减少enum到枚举映射和enum/const到动作切换语句

Ben*_*iel 6 c# reflection enums attributes

我想每个人都看过如下代码:

public void Server2ClientEnumConvert( ServerEnum server)
{
    switch(server)
    {
       case ServerEnum.One:
           return ClientEnum.ABC
       //And so on.
Run Code Online (Sandbox Code Playgroud)

而不是这种不好,我们可以这样做:

public enum ServerEnum
{
     [Enum2Enum(ClientEnum.ABC)]
     One,
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用反射来翻录ServerEnum并从枚举声明本身获取转换映射.

我在这里遇到的问题是在Enum2Enum属性的声明中.

这有效,但用Enum e替换对象o则不行.我不希望能够将对象传递给构造函数,只传递给其他枚举.

public class EnumToEnumAttribute : Attribute
{
    public EnumToEnumAttribute(object o){}
}
Run Code Online (Sandbox Code Playgroud)

这无法编译.

public class EnumToEnumAttribute : Attribute
{
    public EnumToEnumAttribute(Enum e){}
}
Run Code Online (Sandbox Code Playgroud)

是否有编译错误的原因?我还能如何传递地图所需的信息:

EnumtoEnumAttribute(Type dest, string enumString)
Run Code Online (Sandbox Code Playgroud)

这似乎太冗长,但如果这是唯一的方法,那么我想我会用它.

bdu*_*kes 0

我可能会使用 struct 作为类型,然后如果它不是 Enum 类型则抛出异常。我不明白你的 (Type, string) 选项比使用对象或结构更安全。