Программное определение свойств в классах динамически в C #

Я пытаюсь инициализировать объекты в программе C # таким образом, чтобы свойства и значения были известны только во время выполнения. Я использую пакет nuget, который требует, чтобы определение класса было известно для его правильной работы, и я пытаюсь создать этот класс программным способом.

На основании этого сообщения, которое я только что нашел, похоже, что использование ExpandoObject - это шаг в правильном направлении, поскольку мы может устанавливать свойства во время выполнения, однако эти свойства все еще известны априори и жестко запрограммированы в программе. Чего я хочу добиться, так это иметь список произвольно многих свойств [«a», «b», «c», «d», «e», ...] и иметь возможность устанавливать их как свойства в новый экземпляр объекта следующим образом:

class Program
{
    static void Main(string[] args)
    {
        dynamic chano = new ExpandoObject();
        string test = "a";
        chano[test] = "Free the Carter, people need the Carter";
        Console.WriteLine(chano[test]); //want to console "Free the Carter...", of course this fails in compilation
        Console.ReadKey();
    }
}

Однако, конечно, мы сталкиваемся с проблемой, что мы не можем индексировать объекты с помощью []. Существуют ли какие-либо аналогичные типы динамических объектов, которые позволят мне достичь нужной мне функциональности?


person Adam Freymiller    schedule 05.08.2016    source источник
comment
Может вы ищете Dictionary<string,object>?   -  person René Vogt    schedule 05.08.2016
comment
Причина, по которой я хотел бы определить класс программным способом, заключается в том, что я использую пакет nuget CsvHelper, который требует, чтобы разработчик определил класс, который соответствует всем записям строк в загруженном файле csv. stackoverflow.com/questions/7595416/ выглядит многообещающим средством перехода от словаря к объекту, но я думаю, что мне нужно программно определить класс   -  person Adam Freymiller    schedule 05.08.2016
comment
Итак, ваша актуальная проблема заключается в том, как читать динамические объекты из CsvHelper, и вы думали, что вам нужно заранее создать динамический объект, используя динамическую функцию, как если бы это был словарь. Это определение проблемы XY: есть проблема X, но спрашивается о попытке решения Y. Фактический вопрос: как загрузить динамические объекты из CsvHelper?   -  person Panagiotis Kanavos    schedule 05.08.2016
comment
@PanagiotisKanavos, это очень вероятно, я сделаю еще немного исследований и проверю ваш ответ, прежде чем менять заголовок, на всякий случай   -  person Adam Freymiller    schedule 05.08.2016


Ответы (1)


Настоящий вопрос из комментариев выглядит так: «Как я могу динамически загружать строки с помощью CsvHelper»? Несколько лет назад в версии 2.0 была добавлена ​​динамическая поддержка. Вы можете вернуть динамические объекты, передав dynamic в качестве типа, то есть:

dynamic records=csv.GetRecords<dynamic>();
person Panagiotis Kanavos    schedule 05.08.2016