Присвойте литеральную строку как свойство динамического объекта во время выполнения и получите к нему доступ
Как я могу динамически присвоить имя поля 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 ответа
Вы должны бросить свой ExpandoObject
dyn
в 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";