|
Генерный список.
|
|||
---|---|---|---|
#18+
У меня есть списки классов. Код: c# 1. 2. 3.
Мне нужно передать список в качестве аргумента. Есть какой то генерик список на который можно сделать каст? Код: c# 1. 2. 3.
В C я могу сделать войдовый указатель и делать каст на аргумент. Код: c# 1. 2. 3. 4. 5. 6. 7.
Можно что то похожее сделать в С#? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 10:00 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Зачем делать каст на дженерик? Код: c# 1.
и дальше пользуйся методами листа как обычно ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 10:33 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Shocker.Pro Зачем делать каст на дженерик? Код: c# 1.
и дальше пользуйся методами листа как обычно я передаю лист в конструктор объекта (UserControl) Код: c# 1. 2. 3.
а так получаю ошибку Код: c# 1. 2. 3.
The name 'T' does not exist in the current context. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 10:46 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 10:57 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Shocker.Pro Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 11:05 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
сделал так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
на строке List<InOut> generic_list = LoadInOutsFromFile(file_path); получаю ошибку Error CS0128 A local variable or function named 'generic_list' is already defined in this scope я не так делаю каст? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 12:33 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 Error CS0128 A local variable or function named 'generic_list' is already defined in this scope я не так делаю каст? Разве в сообщении об ошибке есть что-то про каст? Оно говорит совсем о другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 12:55 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Сон Веры Павловны jenya7 Error CS0128 A local variable or function named 'generic_list' is already defined in this scope я не так делаю каст? Разве в сообщении об ошибке есть что-то про каст? Оно говорит совсем о другом. так в чём проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 12:59 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 так в чём проблема? Ты привел не тот код, на котором у тебя ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:03 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Shocker.Pro jenya7 так в чём проблема? Ты привел не тот код, на котором у тебя ошибка почему не тот? List<T> generic_list = new List<T>(); объявлен глобально. вот весь метод Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:11 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 сделал так Код: c# 1. 2. 3. 4. 5. 6. 7.
Error CS0128 A local variable or function named 'generic_list' is already defined in this scope я не так делаю каст? То, что внутри каждого кейса заверни в скобки {...}, если хочешь быстро исправить. Но, вообще, switch-case это Зло :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:23 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
Shocker.Pro Ты привел не тот код, на котором у тебя ошибка На самом деле тот. См. выше мой коммент. switch-case не создаёт отдельный скоуп видимости переменных, если его явно не заставить это сделать через "{...}" поэтому у автора оба оюбъявления generic_list попадают в один скоуп (а именно метода), оттуда и ошибка. Автору. Твой код уже просто синтаксически настолько неправилен, что я бы советовал начать с чтения каких-нибудь учебников по C#. Понимания generics, например, у тебя, очевидно, вообще нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:24 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
fkthat jenya7 сделал так Код: c# 1. 2. 3. 4. 5. 6. 7.
Error CS0128 A local variable or function named 'generic_list' is already defined in this scope я не так делаю каст? То, что внутри каждого кейса заверни в скобки {...}, если хочешь быстро исправить. Но, вообще, switch-case это Зло :)) спасибо. помогло. а почему зло? if - else if лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:25 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 спасибо. помогло. Ошибку оно исправило-то, да только теперь все будет работать не так, как ты ожидаешь. Твой локальный generic_list, который ты объявляешь внутри case просто исчезнет в никуда сразу после выхода из блока, а это явно не то, что ты хочешь. jenya7 а почему зло? if - else if лучше? Долго объяснять :)) Стратегия (шаблон проектирования) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:34 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
fkthat jenya7 спасибо. помогло. Ошибку оно исправило-то, да только теперь все будет работать не так, как ты ожидаешь. Твой локальный generic_list, который ты объявляешь внутри case просто исчезнет в никуда сразу после выхода из блока, а это явно не то, что ты хочешь. jenya7 а почему зло? if - else if лучше? Долго объяснять :)) почему локальный? generic_list глобальный. ааа...я понял. а как мне сделать каст на глобальный List<T> generic_list = new List<T>(); ? типа generic_list (as List<Params>)..... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:38 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 ааа...я понял. а как мне сделать каст на глобальный List<T> generic_list = new List<T>(); ? типа generic_list (as List<Params>)..... Никак. Ты можешь приводить одно к другому только если это "одно" наследует от "другого", либо ковариантно ему. Поскольку при компиляции компилятор ничего не знает про тип T то он никак не сможет решить, возможно ли такое преобразование типа, или нет. Я подозреваю, что у тебя сам дизайн этого куска приложения изначально кривой. Ты лучше расскажи, чего ты хочешь в итоге и мы, возможно, сможем подсказать, как правильно сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 13:49 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
fkthat jenya7 ааа...я понял. а как мне сделать каст на глобальный List<T> generic_list = new List<T>(); ? типа generic_list (as List<Params>)..... Никак. Ты можешь приводить одно к другому только если это "одно" наследует от "другого", либо ковариантно ему. Поскольку при компиляции компилятор ничего не знает про тип T то он никак не сможет решить, возможно ли такое преобразование типа, или нет. Я подозреваю, что у тебя сам дизайн этого куска приложения изначально кривой. Ты лучше расскажи, чего ты хочешь в итоге и мы, возможно, сможем подсказать, как правильно сделать. Алгоритм такой 1. Открываю xml файл - и загружаю в структуру, например файл Код: c# 1. 2. 3. 4. 5. 6. 7.
код Код: 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. 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.
под каждый набор данных свой файл и свой список. 2. Загружаю список в DataGridView - пользователь проверяет, изменяет то что ему надо и посылает все ряды по серийному порту. Я создал контрол на котором один DataGridView, кнопка LOAD, кнопка SEND. И я хочу динамически создавать DataGridView и загружать-посылать данные в зависимости от выбранного пользователем типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 14:08 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 под каждый набор данных свой файл и свой список. 2. Загружаю список в DataGridView - пользователь проверяет, изменяет то что ему надо и посылает все ряды по серийному порту. Я создал контрол на котором один DataGridView, кнопка LOAD, кнопка SEND. И я хочу динамически создавать DataGridView и загружать-посылать данные в зависимости от выбранного пользователем типа. Я бы посоветовал тут вообще не связываться со списками и дженериками, а грузить файл в обычный нетипизированный DataSet и байндить грид на него. В формсах байндинг UI к кастомным объектам это боль еще та. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 14:18 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 почему не тот? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 14:35 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
fkthat jenya7 под каждый набор данных свой файл и свой список. 2. Загружаю список в DataGridView - пользователь проверяет, изменяет то что ему надо и посылает все ряды по серийному порту. Я создал контрол на котором один DataGridView, кнопка LOAD, кнопка SEND. И я хочу динамически создавать DataGridView и загружать-посылать данные в зависимости от выбранного пользователем типа. Я бы посоветовал тут вообще не связываться со списками и дженериками, а грузить файл в обычный нетипизированный DataSet и байндить грид на него. В формсах байндинг UI к кастомным объектам это боль еще та. но DataSet должен знать о полях каждого набора данных или как? не хотелось бы создавать 10 DataSet-ов если я создаю UserControl только под один. я могу убрать парсирование файла в список и грузить прямо DataGridView но мне показалось что правильней работать через лэйер со списком. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 15:32 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 как мне сделать каст на глобальный List<T> Все, что касается конкретного типа, не должно быть реализовано в этом твоем обобщенном контроле. У тебя не должно быть приведений дженериков к конкретным типам. Если нужно реализовывать однотипные операции над разными типами, ты просто реализуешь в них какой-то общий интерфейс и твой дженерик контрол работает только через интерфейсы. Если есть что-то слишком специфическое для конкретного типа, это должено быть реализовано в отдельных классах, а не в твоем юзерконтроле. Учить отделять работу с данными от работы с представлением. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 15:48 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 но DataSet должен знать о полях каждого набора данных или как? Датасет это динамическая структура - список полей, их имена, типы и прочее задается уже во время выполнения приложения. Это как раз в случае классов тебе придется под каждую структуру файла свой класс писать. Минусы датасета, это то что он нетипизированный, не может иметь методов, и не имеет такой внятной семантики, как явно описанный класс. С другой стороны, он имеет кучу полезного функционала, который в случае класса реализовать как минимум нетривиально - оповещения об изменнениях, отслеживание измененных записей, фильтрацию данных и проч. Вопрос выбора это что из плюсов/минусов в конкретном случае перевешивает. В твоем сценарии я бы использовал именно датасет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 15:59 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
fkthat jenya7 но DataSet должен знать о полях каждого набора данных или как? Датасет это динамическая структура - список полей, их имена, типы и прочее задается уже во время выполнения приложения. так как делать? так что ли? 1. xml файл в Table1 2. data_set.Tables.Add(Table1); 3. а как привязать DataSet к DataGridView ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 16:06 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 fkthat пропущено... Датасет это динамическая структура - список полей, их имена, типы и прочее задается уже во время выполнения приложения. так как делать? так что ли? 1. xml файл в Table1 2. data_set.Tables.Add(Table1); 3. а как привязать DataSet к DataGridView ? мне кажеться меньше мороки сразу xml файл в DataGridView. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 16:07 |
|
Генерный список.
|
|||
---|---|---|---|
#18+
jenya7 fkthat пропущено... Датасет это динамическая структура - список полей, их имена, типы и прочее задается уже во время выполнения приложения. так как делать? так что ли? 1. xml файл в Table1 2. data_set.Tables.Add(Table1); 3. а как привязать DataSet к DataGridView ? Что-нибудь наподобие: Код: c# 1. 2. 3.
Как-то так. Я последний раз формс трогал почти 20 лет назад, так что прямо так готовый код сходу написать не могу, но идея такая. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 16:12 |
|
|
start [/forum/topic.php?fid=20&msg=40014731&tid=1398438]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 173ms |
0 / 0 |