Перечислить в строковое значение или использовать перечисление в условии if - PullRequest
0 голосов
/ 10 января 2019

У меня есть перечисление с несколькими значениями (я сохранил только одно ниже внутри перечисления). Мне передают эту строку "Online System" из пользовательского интерфейса. Есть ли способ, которым я могу использовать это перечисление для выполнения условия вместо жесткого кодирования, как показано ниже.

if( types.type == "Online System" )

  public enum Type
        {
            [EnumMember]
            Windows
            ,[EnumMember]
            OnlineSystem
        }

Обновление

Кроме того, при нумерации значений перечисления в Windows = 1, OnlineSystem = 2 возникнут ли какие-либо проблемы? Этот код уже есть, но я вот такой номер, создаст ли это какой-либо побочный эффект для кодов, которые могут использовать его уже без нумерации?

1 Ответ

0 голосов
/ 10 января 2019

Сначала вы можете украсить свой Enum атрибутом Description

  public enum Type
  {
    [Description("Windows")]
    Windows,
    [Description("Online System")]
    OnlineSystem
  }

Тогда вы можете написать метод, который будет использовать отражение, чтобы получить описание заданного значения Enum (значение для сравнения).

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute),
        false);

    if (attributes != null &&
        attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}

Это позволит вам проверить

var type = "Online System";
if(  type == GetEnumDescription(Type.OnlineSystem))
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...