Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работать с enum как с int - возможно? / 19 сообщений из 19, страница 1 из 1
18.06.2016, 11:10
    #39258215
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Есть вот такой enum

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  public enum recordStatusEnum : int
    {
        saved    = 1,
        seen     = 2,
        ok       = 3,
        problem  = 4,
        progress = 5,
        complete = 6,
        archive  = 7
    }



Нужно работать с ним как с int; взять максимальное/минимальное.

В лоб не сработало.
...
Рейтинг: 0 / 0
18.06.2016, 11:42
    #39258221
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Monochromatique,
в массив интов перегони и бери максимальное минимальное
...
Рейтинг: 0 / 0
18.06.2016, 12:06
    #39258230
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
MonochromatiqueЕсть вот такой enum

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  public enum recordStatusEnum : int
    {
        saved    = 1,
        seen     = 2,
        ok       = 3,
        problem  = 4,
        progress = 5,
        complete = 6,
        archive  = 7
    }



Нужно работать с ним как с int; взять максимальное/минимальное.

В лоб не сработало.
А что конкретно не сработало? Код покажите.
...
Рейтинг: 0 / 0
18.06.2016, 12:59
    #39258244
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
MonochromatiqueЕсть вот такой enum

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  public enum recordStatusEnum : int
    {
        saved    = 1,
        seen     = 2,
        ok       = 3,
        problem  = 4,
        progress = 5,
        complete = 6,
        archive  = 7
    }



Нужно работать с ним как с int; взять максимальное/минимальное.

В лоб не сработало.вроде enum по умолчанию от int наследован, что мешает просто скастить в int?
...
Рейтинг: 0 / 0
18.06.2016, 13:19
    #39258249
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Monochromatique,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            var enumType = typeof(recordStatusEnum);

            var enumItems =
                from name in Enum.GetNames(enumType)
                let memberInfo = enumType.GetField(name)
                let value = memberInfo.GetValue(null)
                select new
                {
                    Enum = (recordStatusEnum)value,
                    Name = name,
                    Value = (int)value
                };

            var list = enumItems.ToList();
...
Рейтинг: 0 / 0
18.06.2016, 22:48
    #39258353
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Всем спасибо за ответы.

Хотелось просто "на лету" оперировать как с int. Приведением там, или еще как то.

Понятно, что костыль придумать можно.
...
Рейтинг: 0 / 0
19.06.2016, 00:00
    #39258360
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Monochromatique,

Енум придуман для того, что бы абстрагироваться от содержания, а Вы пытаетесь это содержание ему дать
...
Рейтинг: 0 / 0
19.06.2016, 18:39
    #39258516
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Cat2Monochromatique,

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

И всё-таки это костыль :)
...
Рейтинг: 0 / 0
19.06.2016, 18:44
    #39258518
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
MonochromatiqueВсем спасибо за ответы.

Хотелось просто "на лету" оперировать как с int. Приведением там, или еще как то.

Понятно, что костыль придумать можно.
Хм...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public sealed class RecordStatus
{
    public static readonly int Saved = 1;
    public static readonly int Seen = 2;
    public static readonly int Ok = 3;
    public static readonly int Problem = 4;
    public static readonly int Progress = 5;
    public static readonly int Complete = 6;
    public static readonly int Archive  = 7;
}
...
Рейтинг: 0 / 0
19.06.2016, 18:48
    #39258519
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
skyANAMonochromatiqueВсем спасибо за ответы.

Хотелось просто "на лету" оперировать как с int. Приведением там, или еще как то.

Понятно, что костыль придумать можно.
Хм...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public sealed class RecordStatus
{
    public static readonly int Saved = 1;
    public static readonly int Seen = 2;
    public static readonly int Ok = 3;
    public static readonly int Problem = 4;
    public static readonly int Progress = 5;
    public static readonly int Complete = 6;
    public static readonly int Archive  = 7;
}


а не лучше const в данном случае использовать?
...
Рейтинг: 0 / 0
19.06.2016, 19:03
    #39258523
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Roman MejtesskyANAпропущено...

Хм...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public sealed class RecordStatus
{
    public static readonly int Saved = 1;
    public static readonly int Seen = 2;
    public static readonly int Ok = 3;
    public static readonly int Problem = 4;
    public static readonly int Progress = 5;
    public static readonly int Complete = 6;
    public static readonly int Archive  = 7;
}


а не лучше const в данном случае использовать?
Да фиг знает. Если использовать const , то придётся пересобирать все зависимые сборки, если значение какого-то статуса вдруг изменить понадобиться.
...
Рейтинг: 0 / 0
19.06.2016, 22:34
    #39258550
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
skyANAесли значение какого-то статуса вдруг изменить понадобиться

Вот тогда уж действительно лучше const
Чтоб не повадно было.
...
Рейтинг: 0 / 0
19.06.2016, 22:39
    #39258552
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
hVosttskyANAесли значение какого-то статуса вдруг изменить понадобиться

Вот тогда уж действительно лучше const
Чтоб не повадно было.
Ну можно и такое соглашение принять, если ему будут следовать :)
...
Рейтинг: 0 / 0
19.06.2016, 22:40
    #39258553
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
а потом выяснится, что статус может быть сразу saved | seen | complete | archive... намек понятен? и вопрос про max станет менее актуален. Проблемы при таком подходе начнутся только при кверении базы... хотя - есть варианты решения и этой проблемы...
...
Рейтинг: 0 / 0
19.06.2016, 22:47
    #39258556
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
buserа потом выяснится, что статус может быть сразу saved | seen | complete | archive... намек понятен?
Нет, не понятен :) Предлагаете ТСу в качестве значений степень двойки использовать, а не 1, 2, 3, ..., 7?
...
Рейтинг: 0 / 0
20.06.2016, 07:13
    #39258623
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
skyANAbuserа потом выяснится, что статус может быть сразу saved | seen | complete | archive... намек понятен?
Нет, не понятен :) Предлагаете ТСу в качестве значений степень двойки использовать, а не 1, 2, 3, ..., 7?

А я поддерживаю, если набор значений жёстко ограничен и количество совершенно точно никогда не выйдет за пределы 31 (или 63), то лучше использовать степень двойки. С флагами работать очень удобно, особенно в запросах.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    [Flags]
    public enum RecordStatusEnum : int
    {
        saved     = 1,
        seen      = 1 << 1,
        ok        = 1 << 2,
        problem   = 1 << 3,
        progress  = 1 << 4,
        complete  = 1 << 5,
        archive   = 1 << 6
    }
...
Рейтинг: 0 / 0
20.06.2016, 09:23
    #39258655
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
hVostt,

Я извеняюсь, на как Enum может быть не жестко ограничен?
разве можно прямо в коде манипулировать с enum (без всяких выкрутасов)
...
Рейтинг: 0 / 0
20.06.2016, 11:09
    #39258710
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Roman MejteshVostt,

Я извеняюсь, на как Enum может быть не жестко ограничен?
разве можно прямо в коде манипулировать с enum (без всяких выкрутасов)

Я имею в виду количеством возможных значений.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public enum SomeEnum 
{
    One,
    Two,
    Three,
    ...
    ...
    HundredThousandAndFiveHundred
}
...
Рейтинг: 0 / 0
21.06.2016, 01:51
    #39259262
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работать с enum как с int - возможно?
Roman MejteshVostt,

Я извеняюсь, на как Enum может быть не жестко ограничен?
разве можно прямо в коде манипулировать с enum (без всяких выкрутасов)
Легко:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
[Flags]
public enum RecordStatusEnum : int
{
  saved     = 1,
  seen      = 1 << 1,
  ok        = 1 << 2,
  problem   = 1 << 3,
  progress  = 1 << 4,
  complete  = 1 << 5,
  archive   = 1 << 6
}

class Program
{
  static void Main(string[] args)
  {
    RecordStatusEnum foo = RecordStatusEnum.complete;
    foo = (RecordStatusEnum) 1234567;
  }
}


- вполне компилируется и запускается.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работать с enum как с int - возможно? / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]