获得Char Enum的更好方法

Mik*_*ynn 20 c# enums char

有没有更简洁的方法来获取C#中枚举的char值.

 public enum DivisionStatus
        {
            None = 'N',
            Active = 'A',
            Inactive = 'I',
            Waitlist = 'W'
        }

string status = Enums.DivisionStatus.Active.ToString()[0].ToString(); // "A"
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 35

刚刚施展价值:

char status = (char)Enums.DivisionStatus.Active;
Run Code Online (Sandbox Code Playgroud)

请注意,这将使用值而不是标识符.该Enums.DivisionStatus.Active值是字符代码'A',因为它是您定义的值.

直接使用该值比查找值的标识符更快.


Jas*_* L. 6

您还可以使用静态类。不过,如果您始终将值用作字符串,则可以轻松地将每个属性设置为字符串。此方法的优点之一是您可以为将在 IntelliSense 中显示的每个项目添加描述。

public static class DivisionStatus
{
    /// <summary>
    /// Some information about None
    /// </summary>
    public const char None = 'N';
    /// <summary>
    /// Some information about Active, blah blah
    /// </summary>
    public const char Active = 'A';
    /// <summary>
    /// Some information about Inactive, blah blah
    /// </summary>
    public const char Inactive = 'I';
    /// <summary>
    /// Some information about Waitlist, blah blah
    /// </summary>
    public const char Waitlist = 'W';
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ann 5

我建立了一个解决问题的“伪枚举”。在您的情况下,它可能看起来像:

public class DivisionStatus
{
    public static readonly DivisionStatus None = new DivisionStatus('N');
    public static readonly DivisionStatus Active = new DivisionStatus('A');
    public static readonly DivisionStatus Inactive = new DivisionStatus('I');
    public static readonly DivisionStatus Waitlist = new DivisionStatus('W');

    internal char Value { get; private set; }

    public override string ToString()
    {
        return Value.ToString();
    }

    protected DivisionStatus(char value)
    {
        this.Value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以像枚举一样使用它,该枚举在ToString()上返回char枚举值,而无需强制转换:

Console.WriteLine(DivisionStatus.None); // returns 'N'
Run Code Online (Sandbox Code Playgroud)