Перечислить присвоенное значение parse c # - PullRequest
1 голос
/ 21 января 2010

Хорошо, по какой-то причине я не могу решить эту маленькую проблему.

У меня есть следующее перечисление:

public enum EFeedType
{
    TypeOne = 1,
    TypeTwo = 2
}

Теперь я собираюсь получить числовое значение из базы данных. Что ж, мне нужно привести значение int из БД к типу enum:

EDIT: Тип базы данных целочисленный, поэтому мне не нужно приводить из строки. КОНЕЦ РЕДАКТИРОВАНИЯ

EFeedType feedType = (EFeedType) feedId;

Однако, когда я делаю это и передаю значение 2, я получаю следующую ошибку:

Ошибка проверки экземпляра: '2' не является допустимым значением для [Namespace Goes Here] .EFeedType.

Есть мысли о том, что я могу делать неправильно или пропустить?

EDIT Вот код, который я использую:

        //GetFeed will return an int value which is pulled from the database
        int feedId = new FeedEngine().GetFeed("FeedName");
        //Convert the ID to the Enum
        EFeedType feedType = (EFeedType) feedId;
        //Set the User Control FeedType Enum to the enum
        FeedControl.FeedType = feedType;
        //Show the user control
        FeedControl.Visible = true;

РЕДАКТИРОВАТЬ - Подробнее

Хорошо, увидев ответ JSkeet, я вижу, что если мой feedId = 1, тогда он будет устанавливать значение перечисления в TypeTwo вместо TypeOne, как должно. Может быть, мне нужно значение по умолчанию = 0 в моем перечислении, чтобы это работало? Но должен быть лучший способ, потому что, если мои значения не в последовательности.

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Ваша ошибка не будет исходить из строки, на которой она была показана. Я сильно подозреваю, что это происходит из этой строки:

FeedControl.FeedType = feedType;

Я предполагаю, что это свойство выполняет некоторую проверку - и что оно не знает о соответствующем значении.

РЕДАКТИРОВАТЬ: Обратите внимание, что если вы делаете хотите узнать, является ли значение допустимым, используйте Enum.IsDefined. Enum.Parse будет не вызвать исключение для неправильного числового значения, если оно находится в правильном диапазоне.

Вы действительно опубликовали точный код перечисления? Потому что, если он не указывает явно "= 1" и "= 2", он автоматически увеличивается с 0, и это будет вашей проблемой.

Если бы вы могли продемонстрировать все это с помощью короткой, но полной программы, это действительно помогло бы. Нет необходимости обращаться к базе данных и не нужно ничего делать с пользовательским элементом управления.

0 голосов
/ 21 января 2010

Я только что попробовал следующее, и это сработало отлично. Возможно, вы захотите разбить свой код на небольшой тестовый проект, чтобы увидеть, что происходит.

// enum definition
    public enum EFeedType {
        TypeOne = 1,
        TypeTwo = 2,
    }

// usage
        private void TestEnum() {
            Int32 feedId = 2;
            EFeedType stuff = (EFeedType)Enum.Parse(typeof(EFeedType), feedId.ToString());
            Response.Write(stuff.ToString());
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...