获得Char Enum的更好方法

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

public enum DivisionStatus { None = 'N', Active = 'A', Inactive = 'I', Waitlist = 'W' } string status = Enums.DivisionStatus.Active.ToString()[0].ToString(); // "A" 

刚刚施展价值:

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

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

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

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

 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' 

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

 public static class DivisionStatus { ///  /// Some information about None ///  public const char None = 'N'; ///  /// Some information about Active, blah blah ///  public const char Active = 'A'; ///  /// Some information about Inactive, blah blah ///  public const char Inactive = 'I'; ///  /// Some information about Waitlist, blah blah ///  public const char Waitlist = 'W'; } 

var status = (char)Enums.DivisionStatus.Active; 应该做你想要的。 如果枚举文本的第一个字符与底层char值不匹配,那么之前的方式就不会有效。

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

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

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

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

 var status = (char)DivisionStatus.Active; 

或者也许你需要这样做

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