Как установить строку в Enum C #? - PullRequest
4 голосов
/ 03 февраля 2012

Я хочу создать строку ENUM в c #.

По сути, я не хочу устанавливать имя формы в Enum.Когда я открываю форму на главной странице, я хочу поменять регистр на имя формы и открыть эту конкретную форму.Я знаю, ENUM допускает только целое число, но я хочу установить его на string.Любая идея?

Ответы [ 7 ]

18 голосов
/ 03 февраля 2012

Enum не может быть строкой, но вы можете прикрепить атрибут, а затем прочитать значение enum, как показано ниже ....................

public enum States
{
    [Description("New Mexico")]
    NewMexico,
    [Description("New York")]
    NewYork,
    [Description("South Carolina")]
    SouthCarolina
}


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

вот хорошая статья, если вы хотите просмотреть ее: Связывание строк с перечислениями в C #

5 голосов
/ 03 февраля 2012

Как все упоминали, перечисления не могут быть строками (или чем-то еще, кроме целых чисел) в C #. Я предполагаю, что вы пришли с Java? Было бы неплохо, если бы в .NET была эта функция, где перечисления могут быть любого типа.

Обычно я обхожу это с помощью статического класса:

public static class MyValues
{
    public static string ValueA { get { return "A"; } }
    public static string ValueB { get { return "B"; } }
}

С помощью этой техники вы также можете использовать любой тип. Вы можете называть это так же, как если бы вы использовали перечисления:

if (value == MyValues.ValueA) 
{
    // do something
}
2 голосов
/ 03 февраля 2012

Либо сделайте имена членов Enum именно такими, как вы хотите, и используйте .ToString(),

Напишите функцию, подобную этой ...

string MyEnumString(MyEnum value)
{
    const string MyEnumValue1String = "any string I like 1";
    const string MyEnumValue2String = "any string I like 2";
    ...

    switch (value)
    {
        case MyEnum.Value1:
            return MyEnumValue1String;

        case MyEnum.Value2:
            return MyEnumValue2String;

        ...
    }
}

Или используйте какой-нибудь словарьили вместо этого хэш-набор значений и строк.

2 голосов
/ 03 февраля 2012

Я не думаю, что перечисления - лучшее решение для вашей проблемы.Как уже упоминали другие, значения перечисления могут быть только целочисленными значениями.

Вы можете просто использовать Dictionary для хранения форм вместе с их именем, например:

Dictionary<string, Form> formDict = new Dictionary<string, Form>();

private void addFormToDict(Form form) {
  formDict[form.Name] = form;
}

// ...
addFormToDict(new MyFirstForm());
addFormToDict(new MySecondForm());
// ... add all forms you want to display to the dictionary


if (formDict.ContainsKey(formName))
  formDict[formName].Show();
else
  MessageBox.Show(String.Format("Couldn't find form '{0}'", formName));
2 голосов
/ 03 февраля 2012

Не уверен, понял ли я вас правильно, но думаю, вы ищете это?

   public enum State { State1, State2, State3 };

    public static State CurrentState = State.State1;

    if(CurrentState ==  State.State1)
    {
    //do something
    }
2 голосов
/ 03 февраля 2012

Сделайте это:

private IddFilterCompareToCurrent myEnum = 
(IddFilterCompareToCurrent )Enum.Parse(typeof(IddFilterCompareToCurrent[1]),domainUpDown1.SelectedItem.ToString());

[Enum.parse] возвращает объект, поэтому вам нужно его разыграть.

1 голос
/ 03 февраля 2012

string перечисления не существуют в C #. См этот связанный вопрос .

Почему бы вам не использовать int (тип по умолчанию для перечислений) вместо string?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...