2012-02-24 1 views
0

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

Давайте предположим, что я прочитал имя_поля из более SqlDataReader в переменную:

string sqlDataReaderFieldNameStringVariable = reader.GetName(index); 

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

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

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

UPDATE:

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

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

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

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

+1

просто возвращает '' List вместо – BrokenGlass

+0

это здорово! еще один момент для вас, потому что вы были 11 минут назад: P – Pascal

+0

Это называется «голоса», но поскольку вы только поддержали 2 ответа во всех своих 27 вопросах, я не задержу дыхание ;-) – BrokenGlass

ответ

2

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

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

ах глупо мне не нужна динамика вообще: P – Pascal

+0

string val = dyn.test; дерьмо это работает. Динамика классная: P @BrokenGlass Когда я обновил свой браузер, вы были первыми до Джона ;-) – Pascal

1

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

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

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

+0

@Pascal: Мне сложно разобрать ваш комментарий, но если бы вы могли написать его как редактирование на свой вопрос, я посмотрю, что я могу сделать ... –

+0

сделано! 123 идти. – Pascal