c#枚举返回错误的int值

本文关键字:int 错误 枚举 返回 | 更新日期: 2023-09-27 18:10:51

public enum Question
{
    A= 02,
    B= 13,
    C= 04,
    D= 15,
    E= 06,
}

但是当我使用

int something = (int)Question.A;

我得到2而不是02。我怎样才能得到02?

c#枚举返回错误的int值

整数不是字符串。听起来你想用至少两个数字来格式化字符串,你可以这样做:

string text = value.ToString("00"); // For example; there are other ways

区分值的文本表示和实际存储在值中的信息是很重要的。

例如:

int base10 = 255;
int base16 = 0xff;

这里两个变量具有相同的值。它们是用不同形式的数字字面值初始化的,但它们是相同的值。都可以是十进制、十六进制、二进制格式的,无论你想要什么,但值本身是无法区分的。

022的字符串表示形式,前面有一个零。如果您需要在某处输出此值,请尝试使用自定义字符串格式:

String.Format("{0:00}", (int)Question.A)
or
((int)Question.A).ToString("00")

有关此格式字符串的更多详细信息,请参阅MSDN "The "0" Custom Specifier"

整数是数字-就像钱一样,$1等于$1.00和$000001。如果你想以某种方式显示数字,你可以使用:

string somethingReadyForDisplay = something.ToString("D2");

将数字转换为包含"02"的字符串

2与02、002、0002等完全相同。

检查这篇文章:枚举与字符串值在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;
    }

finally read value by

Test t = Test.Foo;
string val = t.GetStringValue();
- or even -
string val = Test.Foo.GetStringValue();

02(索引)存储为整数,因此您无法将其获取为02 !!