获取 Char 枚举的更好方法

发布于 2024-12-15 10:55:55 字数 294 浏览 4 评论 0原文

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

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

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

Is there a cleaner way to get the char value of an enum in C#.

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

无名指的心愿 2024-12-22 10:55:58

var status = (char)Enums.DivisionStatus.Active; 应该完全符合您的要求。如果枚举文本的第一个字符与底层 char 值不匹配,那么您之前执行此操作的方式将不起作用。

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

var status = (char)Enums.DivisionStatus.Active; should do exactly what you want. The way you were doing it before wouldn't have worked if the first character of the enum text didn't match the underlying char value.

This also works for enums that have an int as a backing type.

君勿笑 2024-12-22 10:55:57

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

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'

I build a "pseudo-enum" that solves the problem. In your case it could look like:

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

You can use it like an enum that returns the char enum value on ToString() without casting:

Console.WriteLine(DivisionStatus.None); // returns 'N'
吾性傲以野 2024-12-22 10:55:57

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

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

Simple casting works, I tried it:

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);
  }
}
空袭的梦i 2024-12-22 10:55:57

我只会转换枚举值而不调用 ToString:

var status = (char)DivisionStatus.Active;

或者也许你需要这样做

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

I would just cast the enum value without calling ToString:

var status = (char)DivisionStatus.Active;

Or maybe you'd need to do

var status = (char)(int)DivisionStatus.Active;
瑾兮 2024-12-22 10:55:56

只需转换值:

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

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

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

Just cast the value:

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

Note that this will use the value instead of the identifier. The Enums.DivisionStatus.Active value is the character code of 'A', as that is the value that you have defined.

Using the value directly is faster than looking up the identifier for the value.

痴骨ら 2024-12-22 10:55:56

您还可以使用静态类。不过,如果您始终将值用作字符串,则可以轻松地将每个属性设置为字符串。此方法的优点之一是您可以为将在 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';
}

You could also use a static class. Although, if you're always going to use the values as strings, you could just as easily make each property a string instead. One advantage of this method is that you can add descriptions for each item that will show up in the 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';
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文