Вот, например, свойство класса ViewBag,ControllerBase
и мы можем динамически получать / устанавливать значения и добавлять любое количество дополнительных полей или свойств к этому объекту, что круто. Я хочу использовать что-то подобное, помимо приложения и Controller
класса MVC в других типы приложений. Когда я попытался создать динамический объект и установить его свойство, как показано ниже:
1. dynamic MyDynamic = new { A="a" };
2. MyDynamic.A = "asd";
3. Console.WriteLine(MyDynamic.A);
У меня есть RuntimeBinderException
сообщение. Свойство или индексатор '<> f__AnonymousType0.A' не может быть назначен - он читается только в строке 2. Также я предлагаю, что это не совсем то, что я ищу. Может быть, есть какой-то класс, который позволяет мне делать что-то вроде:
??? MyDynamic = new ???();
MyDynamic.A = "A";
MyDynamic.B = "B";
MyDynamic.C = DateTime.Now;
MyDynamic.TheAnswerToLifeTheUniverseAndEverything = 42;
с динамическим добавлением и настройкой свойств.
Недавно у меня возникла необходимость сделать еще один шаг вперед, который заключался в том, чтобы сделать добавления свойств в динамическом объекте динамическими сами по себе на основе определенных пользователем записей. В приведенных здесь примерах и в документации Microsoft ExpandoObject не говорится о динамическом добавлении свойств, но можно предположить, исходя из того, как вы перечисляете и удаляете свойства. Во всяком случае, я подумал, что это может быть кому-то полезно. Вот чрезвычайно упрощенная версия того, как добавить действительно динамические свойства в ExpandoObject (без учета ключевых слов и другой обработки):
источник
ExpandoObject
это то, что вы ищете.источник
Вы можете использовать то,
ExpandoObject Class
что находится вSystem.Dynamic
пространстве имен.Более подробную информацию можно найти на ExpandoObject MSDN
источник
источник
источник
Или значение присутствует
источник