繁体   English   中英

我可以让Enum返回整数以外的值吗?

[英]Can I make an Enum return something other than an integer?

如果我有以下内容:

public enum TYPE
{
   One = 1,
   Two = 2,
   Three = 3
}

当我做:

 var a = TYPE.One;

我希望它用字符串“ 01”填充变量a。 换句话说,两个数字的前导零。

是否可以通过向SomeEnum分配某种方法来做到这一点? 我意识到我可以使用TYPE.One.ToString(“ 00”),但是我想让它自包含在枚举中,并且使用起来非常简单。

可以做这样的事情:

public static class Ext {

    public static string ToMyString(this Enumer en ) {
         return ((int)en).ToString("00");
    }
}

使用后像这样:

public enum TYPE { One = 1, Two = 2, Three = 3 }
Type t = TYPE.One; 

string s = t.ToMyString();

是的,从概念上讲,它与声明字符串相同,但是它隐藏在扩展方法中。

另一种解决方案是:在这一点上简单地避免以这种方式使用enums

您可以使用description属性将字符串添加到每个枚举元素。

例如

public Enum MyEnum
{
    [Description("Value A Description")]
    ValueA,
    [Description[("Value B Description")]
    ValueB
}

要检索描述值,请使用扩展类

public static class MyEnumExtender
{
    public static string Description(this Enum Value)
    {
        FieldInfo FI = Value.GetType().GetField(Value.ToString());
        IEnumerable<DescriptionAttribute> Attributes = FI.GetCustomAttributes(typeof(DescriptionAttribute), false).Cast<DescriptionAttribute>();
        return (Attributes.Any()) ? Attributes.First().Description : Value.ToString();
    }
}

....

MyEnum EnumVar = MyEnum.ValueA;
string Description = EnumVar.Description();

不要为此使用枚举,而应使用字典或哈希。 当可能性有限时,枚举就在那里,而您不希望或不需要一个值。 它的存储方式无关紧要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM