powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работать с enum как с int - возможно?
19 сообщений из 19, страница 1 из 1
Работать с enum как с int - возможно?
    #39258215
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
Работать с enum как с int - возможно?
    #39258221
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,
в массив интов перегони и бери максимальное минимальное
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39258230
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258244
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258249
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258353
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за ответы.

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

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

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

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

И всё-таки это костыль :)
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39258518
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258519
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258523
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258550
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAесли значение какого-то статуса вдруг изменить понадобиться

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

Вот тогда уж действительно лучше const
Чтоб не повадно было.
Ну можно и такое соглашение принять, если ему будут следовать :)
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39258553
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом выяснится, что статус может быть сразу saved | seen | complete | archive... намек понятен? и вопрос про max станет менее актуален. Проблемы при таком подходе начнутся только при кверении базы... хотя - есть варианты решения и этой проблемы...
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39258556
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserа потом выяснится, что статус может быть сразу saved | seen | complete | archive... намек понятен?
Нет, не понятен :) Предлагаете ТСу в качестве значений степень двойки использовать, а не 1, 2, 3, ..., 7?
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39258623
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работать с enum как с int - возможно?
    #39258655
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

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

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

Я имею в виду количеством возможных значений.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public enum SomeEnum 
{
    One,
    Two,
    Three,
    ...
    ...
    HundredThousandAndFiveHundred
}
...
Рейтинг: 0 / 0
Работать с enum как с int - возможно?
    #39259262
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работать с enum как с int - возможно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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