我有一个这样的枚举:
enum myEnum
{
a = 0101,
b = 2002,
c = 0303
}
我尝试使用转换获取枚举值,但我的枚举开头的0
已被删除。
例如我试过这个:
var val = (int)myEnum.a;
当我们在开头有0
时,如何将枚举值作为字符串?
答案 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')