public enum Question
{
A= 02,
B= 13,
C= 04,
D= 15,
E= 06,
}
但是当我使用
时int something = (int)Question.A;
我得到2而不是02.我怎么能得到02?
答案 0 :(得分:8)
整数不是字符串。听起来你想格式化一个至少有两位数字的字符串,你可以这样做:
string text = value.ToString("00"); // For example; there are other ways
区分值的 text 表示和值中实际存储的信息非常重要。
例如,考虑:
int base10 = 255;
int base16 = 0xff;
这里两个变量具有相同的值。它们使用不同形式的数字文字初始化,但它们是相同的值。无论你想要什么,两者都可以用十进制,十六进制,二进制格式格式化 - 但这些值本身是难以区分的。
答案 1 :(得分:2)
02
是2
的字符串表示形式,前面为零。如果您需要在某处输出此值,请尝试使用自定义字符串格式:
String.Format("{0:00}", (int)Question.A)
or
((int)Question.A).ToString("00")
有关此格式字符串的更多详细信息,请参阅MSDN "The "0" Custom Specifier"
答案 2 :(得分:1)
整数是数字 - 就像金钱一样,1美元等于1.00美元和000001美元。如果您想以某种方式显示某个号码,您可以使用:
string somethingReadyForDisplay = something.ToString("D2");
将数字转换为包含“02”的字符串。
答案 3 :(得分:1)
2与02,002和0002等完全相同。
答案 4 :(得分:1)
查看这篇文章:Enum With String Values In C#这样你就可以满足很容易相关的字符串
您也可以尝试此选项
public enum Test : int {
[StringValue("02")]
Foo = 1,
[StringValue("14")]
Something = 2
}
新的自定义属性类,源代码如下:
/// <summary>
/// This attribute is used to represent a string value
/// for a value in an enum.
/// </summary>
public class StringValueAttribute : Attribute {
#region Properties
/// <summary>
/// Holds the stringvalue for a value in an enum.
/// </summary>
public string StringValue { get; protected set; }
#endregion
#region Constructor
/// <summary>
/// Constructor used to init a StringValue Attribute
/// </summary>
/// <param name="value"></param>
public StringValueAttribute(string value) {
this.StringValue = value;
}
#endregion
}
创建了一个新的扩展方法,我将用它来获取枚举值的字符串值:
/// <summary>
/// Will get the string value for a given enums value, this will
/// only work if you assign the StringValue attribute to
/// the items in your enum.
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string GetStringValue(this Enum value) {
// Get the type
Type type = value.GetType();
// Get fieldinfo for this type
FieldInfo fieldInfo = type.GetField(value.ToString());
// Get the stringvalue attributes
StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
typeof(StringValueAttribute), false) as StringValueAttribute[];
// Return the first if there was a match.
return attribs.Length > 0 ? attribs[0].StringValue : null;
}
最后通过
读取值Test t = Test.Foo;
string val = t.GetStringValue();
- or even -
string val = Test.Foo.GetStringValue();
答案 5 :(得分:0)
02(索引)存储为整数,因此您无法将其作为02 !!