Присвойте литеральную строку как свойство динамического объекта во время выполнения и получите к нему доступ

Как я могу динамически присвоить имя поля sqldatareader во время выполнения динамическому объекту?

Предположим, я прочитал имя поля SqlDataReader в переменную:

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

Я не могу сказать:

dynamic dyn = new ExpandoObject();
dyn.sqlDataReaderFieldNameStringVariable = "test";

Как я могу это сделать?

ОБНОВИТЬ:

еще время получить точку;-) Я добавляю свой объект dyn в список типа ExpandoObject, который является возвращаемым значением метода. Когда я получаю доступ к списку через data[0], свойство.test не существует во время компиляции???

Когда я делаю это вне метода, возвращающего список:

dynamic bla = (ExpandoObject)data[0];
            String shit = bla.Name;

Почему я должен бросить это? Любое решение? Спасибо Джон.

2 ответа

Решение

Вы должны бросить свой ExpandoObjectdyn в IDictionary<string, object> сначала сделать это:

dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";   

Для большинства динамических объектов это сложно. Выполнимо (используя IDynamicMetaObjectProvider) но сложно. Если вы действительно используете ExpandoObject Прост, потому что это реализует IDictionary<string, object>:

dynamic dyn = new ExpandoObject();
var dictionaryView = (IDictionary<string, object>) dyn;
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test";
Другие вопросы по тегам