C# установка динамических свойств из строки цикла с помощью класса dynamicobject
Моя цель-создать динамический класс с динамическими свойствами, используя только DynamicObject. Поэтому я создал класс, который наследует DynamicObject.
public class MyDynamicObject : DynamicObject{ private Dictionary<string, object> Fields = new Dictionary<string, object>(); public override bool TryGetMember(GetMemberBinder binder, out object result) { return Fields.TryGetValue(binder.Name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { Fields[binder.Name] = value; return true; } } public class Program { public static void Main() { dynamic person = new MyDynamicObject(); person.firstname = "Hello"; Console.WriteLine(person.firstname); } }
Конечно, приведенный выше код будет работать так, как ожидалось. Но моя проблема в том, что свойства взяты из строкового массива. Нравится...
Что я уже пробовал:
public static void Main() { dynamic person = new MyDynamicObject(); string[] fields = new string[]{"taxid","newcol","addrs","gender"}; foreach(var f in fields) { person.f = "hello"; } } }
Таким образом, я мог бы вывести как
персона. таксид и скоро....
Возможно ли это?
Примечание: Я не могу использовать ExpandoObject, так что есть ли способ реализовать это как ExpandoObject?
Спасибо
Graeme_Grant
Почему вы хотите это сделать? Какую выгоду вы пытаетесь получить, делая это по сравнению со стандартным классом?
Afzaal Ahmad Zeeshan
У вас новое сообщение.
makubex13
Потому что мне нужно где-то использовать имя объекта. вот почему я не могу использовать ExpandoObject, так как я не могу наследовать его. Но если есть способ, которым класс, наследующий класс DynamicObject, может вести себя как ExpandoObject. Это было бы здорово.
Afzaal Ahmad Zeeshan
Ответьте на их комментарий, чтобы уведомить их о ваших сообщениях.
Graeme_Grant
DynamicObject[^] предоставляет базовый класс для определения динамического поведения во время выполнения и ExpandoObject[^] представляет объект, члены которого могут динамически добавляться и удаляться во время выполнения.
Ты имеешь в виду nameof(...)
? Вам это не нужно DynamicObject
или ExpandoObject
сделать это.
makubex13
Привет @Graeme_Grant, я нашел решение, которое соответствует моим требованиям, я не знаю, является ли это лучшим решением, но оно работает на меня. Я просто опубликую свое решение. Спасибо.