|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Есть enum, имеющий атрибут Flags, в нем значения 0, 1, 2, 4, 8. И есть значение 7, которое является корректным результатом 1|2|4, но не является членом enum. Как в этих условиях проверить, что 7 - корректное значение, соответствующее комбинации флагов? Или 15 - оно включает в себя все флаги, доступные в enum. Только перебрать все значения enum и проверить на and? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:02 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Первое, что пришло в голову Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:18 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Не подходит, забыл про еще одно условие: информация об enum имеется в виде Type. В принципе, можно возвести максимальное значение в квадрат и проверить, что пришедшее меньше его. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:24 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
AntonariyВ принципе, можно возвести максимальное значение в квадрат и проверить, что пришедшее меньше его. Не в квадрат, а умножить на 2 и минус 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:26 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
в смысле удвоить. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:29 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Dima TAntonariyВ принципе, можно возвести максимальное значение в квадрат и проверить, что пришедшее меньше его. Не в квадрат, а умножить на 2 и минус 1.почему минус 1? максимальное значение комбинации флагов - 15, оно меньше 8*2. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:32 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
AntonariyDima Tпропущено... Не в квадрат, а умножить на 2 и минус 1.почему минус 1? максимальное значение комбинации флагов - 15, оно меньше 8*2. Минус 1 это максимальное допустимое (8*2-1=15). Если на меньше сравнивать, то не нужно -1. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:49 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
AntonariyВ принципе, можно возвести максимальное значение в квадрат и проверить, что пришедшее меньше его. Enum.GetValues(typeof(MyEnum)).Cast<int>().Max() * 2 - не годится для "дырявого" enum-а (например 0, 1, 2, 4, 32) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 13:50 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Shocker.ProПервое, что пришло в голову Код: c# 1. 2.
в принципе подходит, но Код: c# 1. 2.
result для 7 равен E2 | E3 (тоже самое, что (aa)7), но IsDefined возвращает false. Flags какой-то бестолковый атрибут, судя по описанию, он только и делает, что заставляет ToString перечислять флаги в значении, являющимся их комбинацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:28 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
LRAntonariyВ принципе, можно возвести максимальное значение в квадрат и проверить, что пришедшее меньше его. Enum.GetValues(typeof(MyEnum)).Cast<int>().Max() * 2 - не годится для "дырявого" enum-а (например 0, 1, 2, 4, 32)Таких у нас нет и вроде не предвидится, так что пусть будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:38 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
AntonariyТаких у нас нет и вроде не предвидится, так что пусть будет.А, ну тогда чистая математика, в чем проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 14:56 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
Можно попробовать как-то так: Код: 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. 28.
Во втором примере (с t2) метод GetFlags выдаёт пустую последовательность. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 15:46 |
|
Проверить значение на соответствие enum
|
|||
---|---|---|---|
#18+
AntonariyЕсть enum, имеющий атрибут Flags, в нем значения 0, 1, 2, 4, 8. И есть значение 7, которое является корректным результатом 1|2|4, но не является членом enum. Так у тебя все значения будут корректными, которые <= максимальному значению. Если конечно нет дыр типа 0, 1, 2, 4, 32 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2019, 17:16 |
|
|
start [/forum/topic.php?fid=20&fpage=16&tid=1398791]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 168ms |
0 / 0 |