powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор флагового енама
7 сообщений из 7, страница 1 из 1
Перебор флагового енама
    #38055225
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть соотв. флаговый енам, в нем каждое значение это степень двойки (последовательно растет)
пропусков нет, вообщем все идеально.
последним значением (максимальным) в этом енаме идет некий AllTypes, который равен item1 | item2 | ... и тд, то есть равен всем значениям вместе взятым.

суть вопроса такая
мне надо сделать перебор
типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach(MyFlagEnumType value in MyVariable)
{
   if (value == MyFlagEnumType.AllTypes)
     continue;
   
   ......
}



или както иначе перебрать, мне надо последовательно вызвать другую функцию, где параметром будет одно из значений енама (единичное, не набор)
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055230
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл главное сказать
нельзя по некоторым причинам пользовать вещи типа Enum.GetValues()
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055245
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tual,

а Enum.GetNames ? =)
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055267
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?
Код: c#
1.
2.
3.
4.
5.
 for (int q = 0; q < 32; q++)
            {
                MyFlagEnumType a = (MyFlagEnumType(1 << q);
                Call_Function(a);
            }
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055278
tual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот GetValues точно помню, остальные не помню, но критично важно не рисковать :)

Да, сделал таки по сути числами.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// 64 - 2^64 - max long value
                for (int j = 0; j < 64; ++j)
                {
                    long value = (long)1 << j;
                    if (value > (long)MyFlagEnumType.AllTypes)
                        break;

                    // for any case
                    bool res = ((MyFlagEnumType)value & MyFlagEnumType.AllTypes) > 0;
                    if (!res)
#if DEBUG
                        throw new BlablaException(string.Format("Missed {0} in MyFlagEnumType.AllTypes", ((MyFlagEnumType)value)));
#else
                        continue;
#endif

                    и дальше вызов функции
                }
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055282
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tual,

вот это изврат)) почему нельзя сделать GetXXX? Интересно даже
...
Рейтинг: 0 / 0
Перебор флагового енама
    #38055283
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
using System;

[Flags]
public enum MyEnum : int
{
    One = 1,
    Two = 2,
    Four = 4,
    All = 8
}

class Program
{
    static void Main(string[] args)
    {
        var p = 1;

        do
        {
            Console.WriteLine(p);
            p = p << 1;
        }
        while (p != (int)MyEnum.All);

        Console.ReadKey();
    }
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перебор флагового енама
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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