|
|
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
А как бы проще организовать конвертацию энумератора в строку и обратно для таких конечных строк 'lower', 'upper', 'title', 'none', 'assume-lower', 'assume-title', 'assume-upper'? Функции GetEnumName/GetEnumValue не подходят, т.к. конечные строки содержат знак "-" и я не объявлю такие идентификаторы Таких энумераторов много, так что не очень хочется под каждый писать отдельные функции конвертации С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 18:15 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Напиши свою функцию. Ну или класс, если требуется что-то большее, чем просто имена. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 18:25 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, System.TypInfo.AddEnumElementAliases ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 18:28 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
> System.TypInfo.AddEnumElementAliases Ух-ты, круто... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 18:30 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey System.TypInfo.AddEnumElementAliases ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 19:04 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Альтенативный вопрос Код: pascal 1. Можно ли получить TRttiType для элемента перечисления, чтобы потом у него вызвать GetAttributse()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 19:38 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Родилaсь такая структура Код: pascal 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2021, 21:25 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey _Vasilisk_, System.TypInfo.AddEnumElementAliases http://docwiki.embarcadero.com/Libraries/Sydney/en/System.TypInfo.AddEnumElementAliases а справки и примеров нет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2021, 09:50 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Ммм? Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2021, 12:27 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
alekcvp, вдруг просочится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2021, 12:37 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
alekcvp Ммм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2021, 18:39 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
wadman alekcvp, вдруг просочится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2021, 21:57 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. я бы такие проверки в конструктор класса убрал, это и быстрее и проверка будет при запуске, а не при использовании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 09:46 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) _Vasilisk_, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. я бы такие проверки в конструктор класса убрал, это и быстрее и проверка будет при запуске, а не при использовании а я не люблю в конструкторе никаких исключений поднимать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 10:16 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
А я задачу, аналогичную задаче ТC, сделал через helper, реализовал в нем .ToString для enum и всё работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 10:39 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) я бы такие проверки в конструктор класса убрал, это и быстрее и проверка будет при запуске, а не при использовании asutp2 А я задачу, аналогичную задаче ТC, сделал через helper, реализовал в нем .ToString для enum и всё работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 16:03 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) я бы такие проверки в конструктор класса убрал, Код: pascal 1. вызывается раньше чем классовый конструктор Код: pascal 1. Т.е. проверку нужно вставлять в двух местах: и в конструкторе и в методе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 16:34 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ kealon(Ruslan) я бы такие проверки в конструктор класса убрал, есть простое правило: "если программа работает неправильно, значит ты что-то неправильно написал" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 19:41 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) есть простое правило: "если программа работает неправильно, значит ты что-то неправильно написал" Код: pascal 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. 29. 30. 31. 32. TClass2.Create TClass1<Byte>.Method TClass1<Byte>.CreateНу конечно же я что-то неправильно написал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 20:59 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Наверное это потому что ты вызываешь метод класса из конструктора другого класса, нет?.. Никто не обещал что конструктор будет вызываться при любом обращении к классу. Более того, если прочитать справку то там, внезапно, написано: Note: Even though the compiler takes care of ordering the initialization of classes, in some complex scenarios, ordering may become random. This happens when the class constructor of a class depends on the state of another class that, in turn, depends on the first class. У тебя класс2 зависит от класса1, потому что он вызывает его методы, а класс1 зависит от класса2, потому что это дженерик и до первого обращения к нему с указанием типа его вообще не существует. Более того, дальше тебя ждёт ещё больше сюрпризов, потому что: Note: The class constructor for a generic class or record may execute multiple times. The exact number of times the class constructor is executed in this case depends on the number of specialized versions of the generic type. For example, the class constructor for a specialized TList<String> class may execute multiple times in the same application. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2021, 21:42 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
alekcvp, 1-е верно, компилятор может упустить вызов конструктора если он например может его выкинуть или если "не видит" связи между вызовами - запустить его как получится авторNote: The class constructor for a generic class or record may execute multiple times. The exact number of times the class constructor is executed in this case depends on the number of specialized versions of the generic type. For example, the class constructor for a specialized TList<String> class may execute multiple times in the same application. а вот это неправда, там такой же счётчик как и у Unit-ов. Эту багу хорошо повыправляли на 10-ке Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 10:53 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) а вот это неправда, там такой же счётчик как и у Unit-ов. Эту багу хорошо повыправляли Это цитата из справки, если что. Причём из справки для 10.4. Так что если ты с чем-то не согласен - пиши сразу в Эмбу 😁 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 11:05 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
alekcvp, и что же я им напишу, верните багу назад в соответствии с этой документацией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 11:35 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Столько проблем, хотя в варианте с хелпером все работает предсказуемо и без багов))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 11:38 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
asutp2, да я кажется знаю где у _Vasilisk_ бага, он как-то просил пример по одному вопросу "почему так делать нельзя", похоже он сам его и написал но пока не видно как он его использует, однозначно утверждать нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 11:57 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) на 10-ке kealon(Ruslan) но пока не видно как он его использует, однозначно утверждать нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 17:08 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, 10.2 Update 1 ты лишь модуль привёл, а где использование? вот твой код Код: pascal 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. всё пучком Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2021, 19:13 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) ты лишь модуль привёл, а где использование? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2021, 15:07 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ kealon(Ruslan) ты лишь модуль привёл, а где использование? полностью модуль где ты это использовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2021, 10:47 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Гаджимурадов Рустам> System.TypInfo.AddEnumElementAliases Ух-ты, круто... Круто-то круто, но скажем в 10.2 разумно использовать невозможно: Код: pascal 1. не объявлена в интерфейсной секции. Лучше использовать спец. атрибуты (что-то вроде TEnumAttribute), привязываемые к перечислимому типу: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Можно добавить: Код: pascal 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Использование всего этого - что-то вроде такого: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 06:25 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kapas, а смысл этой всей городушки, если элементарное SomeDescr[EnumVal] при SomeDescr: array[TEnum] вернет то, что надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 10:26 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal kapas, а смысл этой всей городушки, если элементарное SomeDescr[EnumVal] при SomeDescr: array[TEnum] вернет то, что надо Вы везде вставляете константы и явно используете глобальные переменные? И не надоедает? Ведь если звёзды зажигают- значит- это кому то надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 10:59 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kapas не объявлена в интерфейсной секции. kapas Лучше использовать спец. атрибуты Код: pascal 1. 2. 3. 4. Fr0sT-Brutal а смысл этой всей городушки, если элементарное SomeDescr[EnumVal] при SomeDescr: array[TEnum] вернет то, что надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2021, 16:37 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
1. _Vasilisk_В 10.3 объявлена. Может плохо ищете? Я же четко указал 10.2. Можете убедиться сами. Видимо забыли это сделать в 10.2., а в 10.3 исправили. Хм. На самом деле GetAliasEnumValue вызывается из GetEnumValue косвенно. И это работает. Но похоже - нельзя получить по значению сам алиас. Ну да ладно. Вещь конечно удобная, но я ее использовать пока не собираюсь. 2. _Vasilisk_Если бы атрибуты можно было повесить на само значение. А так, в таком виде, сомнительное удовольствие. Что значить на само значение? Можно привести пример? Вы имели ввиду следующее? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 3. _Vasilisk_... Лучше было бы уже делать так Можно сделать и так: Код: pascal 1. , но это не тоже самое что привязать атрибуты к значениям. Хотя тут есть нюансы, о которых нужно говорить отдельно. Но это - другая история. 4. Такой "штукой", о которой я писал, пользуюсь с момента появления в Delphi атрибутов и с переходом к новым версиям проблем не было. Это часть других тех. решений (сериализация/десериализация; описатели в элементах управления и др.). Для меня решение которое я набросал вполне удобно в использовании. Я не агитирую - просто показываю одно из возможных решений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 09:44 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kapas Вы везде вставляете константы и явно используете глобальные переменные? И не надоедает? Константы вставляю, а при чем тут глобальные переменные, не понял. _Vasilisk_ Вернет. И этот вариант был бы идеален. Если бы не требовалось обратное преобразование. А мостить в кучу мест реализацию IndexOf, причем для разных энумераторов, ну такое... А это уже другой вопрос. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 10:20 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
P.S.: Если авторВы имели ввиду следующее? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это вы объявить сможете, а использовать, увы - невозможно (см. довольно старое сообщение: https://stackoverflow.com/questions/2134120/delphi-2010-rtti-explore-enumerations). С того времени ничего не изменилось и вряд ли сейчас разработчики пойдут на то, чтобы реализовать хранение такой RTTI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 10:26 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, а что бы просто не написать парсер? ckCascadeAll -> "Cascade All" + для сложных случаев добавили бы отдельный метод установки TEnum<T>['Name'] := 'Test'; вполне приемлимо ещё можно такой фокус сделать Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 13:15 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kapas Вы имели ввиду следующее? Fr0sT-Brutal А это уже другой вопрос. kealon(Ruslan) а что бы просто не написать парсер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 14:30 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
По-поводу инициализации: будете прописывать ее в секции инициализации? Что вы например, будете делать при использовании этого вашего реестра в приложении требующего сериализацию/десериализацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 16:34 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
и _Vasilisk_ kealon(Ruslan) а что бы просто не написать парсер?
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 17:31 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
kapas Что вы например, будете делать при использовании этого вашего реестра в приложении требующего сериализацию/десериализацию? kealon(Ruslan) пока у тебя довольно посредственно kealon(Ruslan) TEnumAliasesManager<T>.IndexOf - перебор kealon(Ruslan) нет проверки использования пока не вызовется хоть одна функция kealon(Ruslan) [li]TEnumAliasesManager<T>.Register сложно проверяется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 18:14 |
|
||
|
Enum to string и обратно
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ kealon(Ruslan) пока у тебя довольно посредственно ИМХО:
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2021, 20:49 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037634]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
102ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 531ms |

| 0 / 0 |
