Получить перечисляемое поле из строки - PullRequest
2 голосов
/ 21 июля 2011

Немного странно это.Пожалуйста, прости полупсевдокод ниже.У меня есть список перечисленных значений.Скажем, например, так:

public enum Types
    {
       foo = 1,
       bar = 2,
       baz = 3
    }

Который, с уважением, станет в коде:

Types.foo
Types.bar
Types.baz

Теперь у меня есть выпадающий список, который содержит следующие элементы списка:

var li1 = new ListItem() { Key = "foo" Value = "Actual Representation of Foo" }
var li2 = new ListItem() { Key = "bar" Value = "Actual Representation of Bar" }
var li3 = new ListItem() { Key = "baz" Value = "Actual Representation of Baz" }

ради полноты:

dropDownListId.Items.Add(li1); dropDownListId.Items.Add(li2); dropDownListId.Items.Add(li3);

Надеюсь, что все еще со мной.Что я хочу сделать, так это на Autopostback взять строку "foo" и преобразовать ее в Types.foo - без использования переключателя (так как перечисляемые значения генерируются из базы данных и могут измениться).

Надеюсь это имеет смысл?Есть идеи, с чего начать?

Ответы [ 3 ]

6 голосов
/ 21 июля 2011

Sure:

Types t;
if(Enum.TryParse(yourString, out t)) // yourString is "foo", for example
{
    // use t
}
else
{
    // yourString does not contain a valid Types value
}

Существует также перегрузка, которая принимает логическое значение, которое позволяет вам указывать нечувствительность к регистру: http://msdn.microsoft.com/en-us/library/dd991317.aspx

Enum.TryParse является новым в .NET 4. Если вы застряли в предыдущей версии, вам придется использовать не типизированный безопасный метод Enum.Parse (который выдает исключение в случае сбоя преобразования вместо возврата false), вот так:

try
{
    Types t = (Types)Enum.Parse(typeof(Types), yourString);
    // use t
}
catch(ArgumentException)
{
    // yourString does not contain a valid Types value
}

Enum.Parse также имеет перегрузку для нечувствительности к регистру.

0 голосов
/ 21 июля 2011

Если я правильно понял, вы можете сделать:

Types fooEnum = Enum.Parse(typeof(Types), "foo");

См .: http://msdn.microsoft.com/en-us/library/essfb559.aspx

0 голосов
/ 21 июля 2011

Итак, вы хотите: Enum.Parse(typeof(Types), postbackValue)

или я что-то пропустил?

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