Лучший Способ Получить Char Enum

есть ли более чистый способ получить значение char перечисления в C#.

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

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

6 ответов


просто приведите значение:

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

обратите внимание, что это будет использовать значение вместо идентификатора. The 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;
    }
}

вы можете использовать его как перечисление, которое возвращает значение перечисления char на ToString () без приведения:

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

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;