在运行时期间将文字字符串指定为动态对象的属性并访问它

时间:2012-02-24 21:10:06

标签: c# .net dynamic expandoobject

如何在运行时动态地将sqldatareader的fieldname分配给动态对象?

让我们假设我已经将SqlDataReader的字段名读入变量:

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

我不能说:

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

我该怎么做?

更新:

还有时间得到一个点;-)我将我的dyn对象添加到ExpandoObject类型的List中,这是方法的返回值。当我通过data [0]访问列表时.test属性在编译时不存在???

当我在返回List的方法之外执行此操作时:

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

为什么我要施展它?任何解决方法?谢谢Jon。

2 个答案:

答案 0 :(得分:2)

您必须先将ExpandoObject dyn转换为IDictionary<string, object>才能执行此操作:

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

答案 1 :(得分:1)

对于大多数动态对象,这很棘手。可行(使用IDynamicMetaObjectProvider)但很棘手。如果您使用ExpandoObject 真的,那很简单,因为它实现了IDictionary<string, object>

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