2011-11-14 53 views
9

是否有更清晰的方式来获取C#中枚举的char值。更好的方法来获取Char Enum

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

string status = Enums.DivisionStatus.Active.ToString()[0].ToString(); // "A" 
+0

OmG ...你在这里问得好。 – nawfal

回答

24

只投值:

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

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

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

+0

基础类型可以是除char之外的任何整型:http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx – phoog

+0

@phoog:我已经从答案中删除了它。 – Guffa

+0

我想我没有正确解释它。如果我想要它有一个字符串作为结果,而不是字符。 –

0

我只想投枚举值,而不调用toString:

var status = (char)DivisionStatus.Active; 

或者,也许你需要做的

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

var status = (char)Enums.DivisionStatus.Active;应该做你想要什么。如果枚举文本的第一个字符与底层char值不匹配,那么以前执行此操作的方式将无法工作。

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

+0

枚举确实有一个int作为支持类型(因为它是默认值)。定义中使用的char值被隐式转换为int值。 – Guffa

0

简单铸造的作品,我试了一下:

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

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

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' 
1

你也可以使用一个静态类。虽然,如果你总是将这些值作为字符串使用,那么可以轻松地将每个属性改为一个字符串。这种方法的一个优点是您可以为每个项目添加说明,这些项目将显示在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'; 
} 
相关问题