Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
12 / 12 / 3
Регистрация: 22.10.2010
Сообщений: 137

Динамическое создание типа для коллекции

02.05.2017, 22:11. Показов 6655. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть такая задумка, но не знаю как реализовать.

Файл электронной таблицы, в котором допустим есть 10 колонок, моя программа не знает о количестве и названиях колонок. Описание этой таблицы находится во внешнем файле, условно config.xml. Хочу сделать либо Struct, либо Class, в которых буду описывать тип моей электронной таблицы(названия колонок). Допустим мне надо из 10 колонок только 5 использовать для работы. Какие именно колонки надо использовать я беру из файла settings.xml
вот ещё был мой вопрос и ещё моя тема

Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using ExcelLibrary;
using DocumentFormat.OpenXml.Packaging;
 
namespace XML_Parser
{
struct DataArray
    {
        public string Type_1;
        public string Type_2;
        public string Type_3;
        public string Type_4;
        public string Type_5;
        public string Type_6;
        public string Type_7;
        public string Type_8;
        public string Type_9;
        public string Type_10;
 
        public DataArray(string type_1, string type_2, string type_3, string type_4, string type_5, string type_6, string type_7, string type_8, string type_9, string type_10)
        {
            Type_1 = type_1;
            Type_2 = type_2;
            Type_3 = type_3;
            Type_4 = type_4;
            Type_5 = type_5;    
            Type_6 = type_6;
            Type_7 = type_7;
            Type_8 = type_8;
            Type_9 = type_9;
            Type_10 = type_10;       
        }
    class ConvertSelectetdFile
    {
        List<DataArray> workList = new List<DataArray>();      
        
 
........................некий код, который работает с этой коллекцией..........................
 
 
    }


Я могу жестко прописать тип моей структуры и использовать только нужные в данный момент поля. Но если состав электронной таблицы изменится, то мне придётся переписывать код, а хочется сделать универсальную программу, в которой структура DataArray создавалась бы на основе файла настроек и ещё лучше, если только нужные поля электронной таблицы считывать и записывать значения в поля динамически созданной DataArray.

В общем как можно создать типизированную коллекцию List<DataArray>, в которой тип получается и создаётся из файла настроек. Программа не знает ничего, а только использует файла настроек.

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2017, 22:11
Ответы с готовыми решениями:

Динамическое создание переменной определенного типа с заданным именем
Я пытался использовать перегрузку (String, String) метода Activator.CreateInstance: dynamic h =...

Foreach для коллекции неизвестного типа
Всем добрый день. Пытаюсь обратиться поздним связыванием к библиотеке Ionic.Zip.dll. Есть работающий код: private static void...

Динамическое создание Series TChart , изменение типа графика - C++ Builder
Здравствуйте, хотел спросить не мог бы кто объяснить мне как создавать динамическое количество series и как менять тип графика у Series (то...

25
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
05.06.2017, 10:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Psilon Посмотреть сообщение
Как F#, такой же строготипизированный язык как C#, будет реализовывать эту динамическую модель?
) ну откудаж я знаю, как. Я F# только на презентациях и видел. На видео, ссылку, которого я привёл, человек получает модель данных просто передавая функции разные наборы. На 6 минуте об этом начинает говорить.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.06.2017, 12:34
aquaMakc, надо было просто на 5 минуту ролик поставить

А так-то все просто: в F# есть специальный тип (Type Provider), и когда F# компилятор видит его использование, он прямо во время билда лезет по ссылке, которая там указана, достает JSON и генерит типы. Ну а дальше все прозаично. Вся магия именно в том, что F# компилятор специальным образом работает с этим типом, по сути это декларация типа атрибута, а не рантайм-зависимость. По крайней мере я так понял.

Довольно любопытно. Кстати, забавно, что я был на дотнексте, но выбрал другой зал Так бы чего узнал новомодного.
То же самое добавить в шарп не составляет труда, и я думаю, добавят.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
05.06.2017, 15:46
То же самое добавить в шарп не составляет труда, и я думаю, добавят.
добавят. конечно добавят. вон linq же добавили. ну и что, что он нефига нерасширяем и вообще является жалким подобием computation expressions, зато есть. и паттерн матчинг (это даже не подобие это ) добавили. даже туплы в C# во вменяемом виде появились (правда пришлось всего-то 10 лет подождать). так что лет так через 10-15 добавят (правда как это будет выглядеть представить невозможно).
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.06.2017, 15:50
pycture, linq вроде раньше самого эф шарпа добавили LINQ вроде норм, не считая того, что он реализуется в рантайме, вместо того, чтобы быть расширением типа макросов как в том же Rust"е (я в соседнем треде про это писал).

Лет через 10-15 я думаю уже на другой язык перейду Шарп был хорош долгое время, но ему уже почти 20 лет. Каждые 30 лет язык стоит менять, имхо

Добавлено через 41 секунду
Цитата Сообщение от pycture Посмотреть сообщение
и паттерн матчинг
Ну, он убогий, но щас я вернулся на 2015 студию и мне его не хватает Нормальный должны добавить же в следующей версии.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
07.06.2017, 17:26
Цитата Сообщение от Psilon Посмотреть сообщение
linq вроде раньше самого эф шарпа добавили
тут надо не забывать, что linq это порождение из недр MSR (откуда в C# тащили все что нашли с хаскеле и f#)
далее
первый linq это c# 3.0 (19 November 2007)
первый f# 2005 (а до этого было несколько публичных версий начиная с 0.7)
Шарп был хорош долгое время
шарп долгое время был чуть улучшенной жабой. только в последнее время там чтото полезное (дабы кода писать меньше) стало появлятся.
Ну, он убогий, но щас я вернулся на 2015 студию и мне его не хватает
у меня при попытке перейти на шарп внезапно нехватает не только PM но и ADT. приходится ползти назад и обрабатывать данные в f#. писать адскую нечитаемую смесь, в 5 раз большую по коду, рука не подымается.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.06.2017, 18:09
Цитата Сообщение от pycture Посмотреть сообщение
тут надо не забывать, что linq это порождение из недр MSR (откуда в C# тащили все что нашли с хаскеле и f#)
далее
первый linq это c# 3.0 (19 November 2007)
первый f# 2005 (а до этого было несколько публичных версий начиная с 0.7)
я про F# услышал что-то около 2009, поэтому думал, он свежее.
Цитата Сообщение от pycture Посмотреть сообщение
шарп долгое время был чуть улучшенной жабой. только в последнее время там чтото полезное (дабы кода писать меньше) стало появлятся.
А Nemerle - это чуть улучшенный шарп Нет же, разные языки, и шарп на джаву начиная с 2.0 (который вышел в бородатом году) совсем не похож. По крайней мере если смотреть более широко, чем просто ООП.

Добавлено через 1 минуту
Цитата Сообщение от pycture Посмотреть сообщение
у меня при попытке перейти на шарп внезапно нехватает не только PM но и ADT. приходится ползти назад и обрабатывать данные в f#. писать адскую нечитаемую смесь, в 5 раз большую по коду, рука не подымается.
Увы, шарп несовершенен, это все понимают. F# для того и сделали, чтобы не писать адскую смесь. Да, Records добавят в 8.1, это конечно не ADT, но уже что-то. Много чего не хватает, что есть в том же тайпскрипте, например автоматическое использование более специального типа после проверки на is (тут блин даже извратились с новым a is B b), но мы живем в реальном мире, в котором есть место компромиссам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2017, 18:09

Какой тип коллекции выбрать для набора типа:
Есть данные типа: школа3 Аня т.11-18 школа3 Аня т.51-25 школа3 Алла т.56-84 школа5 Володя т.51-25...

Динамическое определение типа для приведения
Добрый день! На финальной стадии написания курсового проекта возник вопрос. Я не слишком сильна в рефлексии, но использую небольшой её...

Создание коллекции для последующей обработки
Доброго времени суток, уважаемые форумчане. Подскажите, каким образом лучше написать метод по формированию коллекции, к примеру состоящую...

Динамическое изменение типа объекта (для обобщённых типов)
Здравствуйте, проблема в следующем: есть класс с generic: public class Entity { //создаем объект...

Создание расширенных методов для любой коллекции, делегаты
Нужна скорая помощь!) У меня вот такой класс: using System; using System.Text; namespace ConsoleApplication1 { public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru