是否有更清晰的方式来获取C#中枚举的char值。更好的方法来获取Char Enum
public enum DivisionStatus
{
None = 'N',
Active = 'A',
Inactive = 'I',
Waitlist = 'W'
}
string status = Enums.DivisionStatus.Active.ToString()[0].ToString(); // "A"
是否有更清晰的方式来获取C#中枚举的char值。更好的方法来获取Char Enum
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'
的字符代码,因为这是您定义的值。
直接使用该值比查找该值的标识符要快。
我只想投枚举值,而不调用toString:
var status = (char)DivisionStatus.Active;
或者,也许你需要做的
var status = (char)(int)DivisionStatus.Active;
var status = (char)Enums.DivisionStatus.Active;
应该做你想要什么。如果枚举文本的第一个字符与底层char值不匹配,那么以前执行此操作的方式将无法工作。
这也适用于具有int作为后备类型的枚举。
枚举确实有一个int作为支持类型(因为它是默认值)。定义中使用的char值被隐式转换为int值。 – Guffa
简单铸造的作品,我试了一下:
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);
}
}
我建立一个“伪枚举”解决该问题。在你的情况下,它可能看起来像:
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
{
/// <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';
}
OmG ...你在这里问得好。 – nawfal