将枚举值作为字符串

时间:2018-03-28 05:35:44

标签: c# enums

我有一个这样的枚举:

enum myEnum
{
    a = 0101,
    b = 2002,
    c = 0303
}

我尝试使用转换获取枚举值,但我的枚举开头的0已被删除。

例如我试过这个:

var val = (int)myEnum.a;

当我们在开头有0时,如何将枚举值作为字符串?

6 个答案:

答案 0 :(得分:1)

您应该重新考虑您的设计,但是如果您想要将enum整数检查到给定字符串,则可以使用.ToString("0000")从整数"0101"中获取字符串101

答案 1 :(得分:1)

如果您始终需要特定数量的数字,则可以使用字符串格式来获取前导零:

var str = String.Format("{0:0000}", (int)myEnum.a); 

或者,更短:

var str = $"{(int) myEnum.a:D4}"; 

<强>替代:

使用属性向枚举

添加额外信息

属性:

public class DescriptionAttribute : Attribute
{
    public string Name { get; }

    public DescriptionAttribute(string name)
    {
        Name = name;
    }
}

枚举:

enum myEnum
{
    [Description("0101")]
    a = 101,

    [Description("2002")]
    b = 2002,

    [Description("303")]
    c = 303
}

扩展方法:

public static string GetDescription(this myEnum e)
{
    var fieldInfo = e.GetType().GetField(e.ToString());
    var attribute = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
    return attribute.Name;
}

用法:

var name =  myEnum.a.GetDescription() //will return '0101'

答案 2 :(得分:1)

首先,枚举是整数,因为正如其名称所示,它们是枚举和枚举,它们是数字,因此枚举是整数。

其次,你必须记住零是一个空值,因为系统是01或001就像1,因为(基础数学)左边的零是没有价值的,所以这段代码是不正确的。

enum myEnum
{
   a=0101,
   b=2002,
   c=0303,
}

正确的方法是

enum myEnum
{
   a = 0,
   b = 1,
   c = 2
}

零是单独的,所以系统将其视为索引

现在,您应该只使用C#

的转换过程之一
string strOne = ((myEnum)0).ToString();
string strTwo = ((myEnum)1).ToString();
string strThree = ((myEnum)2).ToString();

阅读MSDN参考https://msdn.microsoft.com/en-us/library/16c1xs4z(v=vs.110).aspx

答案 3 :(得分:1)

枚举值始终为整数。如果需要将字符串与枚举值相关联,则可以使用字典:

enum myEnum { a, b, c }

Dictionary<myEnum, string> lookup = new Dictionary
{
    { a, "0101" },
    { b, "2002" },
    { c, "0303" }
};

要获取与特定值关联的字符串,请使用以下命令:

var s = lookup[myEnum.a];  // s = 0101

处理此类问题的另一种常见方法是使用常量。

class MyConstants
{
    public const string a = "0101";
    public const string b = "2002";
    public const string c = "0303";
}

var s = MyConstants.a; // s = 0101

答案 4 :(得分:1)

尝试使用格式:您想要 4 数字,这就是您可以添加d4格式字符串的原因。为了隐藏所有这些implmentation细节(强制转换和格式化),让我们编写一个扩展方法

  enum myEnum {
    a = 0101,
    b = 2002,
    c = 0303
  }

  static class myEnumExtensions {
    public static string ToReport(this myEnum value) {
      return ((int)value).ToString("d4"); // 4 digits, i.e. "101" -> "0101"
    }
  }

  ...

  myEnum test = myEnum.a;

  Console.Write(test.ToReport());

答案 5 :(得分:-2)

假设你的枚举中的数字总是长度为4 你可以使用以下

var val = (int)myEnum.a).ToString().PadLeft(4, '0')