获得Char Enum的更好方法

时间:2011-11-14 00:56:53

标签: 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"

6 个答案:

答案 0 :(得分:34)

只需输出值:

char status = (char)Enums.DivisionStatus.Active;

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

直接使用该值比查找值的标识符要快。

答案 1 :(得分:4)

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

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;
    }
}

你可以像枚举一样使用它来返回ToString()上的char枚举值而不进行强制转换:

Console.WriteLine(DivisionStatus.None); // returns 'N'

答案 2 :(得分:2)

简单的铸造工作,我试过了:

using System;

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

class Program
{
  public static void Main()
  {
    var ds = DivisionStatus.Active;
    Console.WriteLine((char)ds);
  }
}

答案 3 :(得分:2)

您也可以使用静态类。虽然,如果您总是将值用作字符串,您可以轻松地将每个属性设置为字符串。此方法的一个优点是您可以为将在InteliSense中显示的每个项目添加说明。

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';
}

答案 4 :(得分:1)

var status = (char)Enums.DivisionStatus.Active;应该完全按照您的意愿行事。如果枚举文本的第一个字符与底层char值不匹配,那么之前的方式就不会有效。

这也适用于以int作为支持类型的枚举。

答案 5 :(得分:0)

我只是在不调用ToString的情况下强制转换枚举值:

var status = (char)DivisionStatus.Active;

或者你可能需要做

var status = (char)(int)DivisionStatus.Active;