Присвойте литеральную строку как свойство динамического объекта во время выполнения и получите к нему доступ - PullRequest
0 голосов
/ 25 февраля 2012

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

Допустим, я прочитал имя поля SqlDataReader в переменную:

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

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

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

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

ОБНОВЛЕНИЕ:

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

Сначала вы должны разыграть ExpandoObject dyn на IDictionary<string, object>, чтобы сделать это:

dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";   
1 голос
/ 25 февраля 2012

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

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