0

如何在运行时将 sqldatareader 的字段名动态分配给动态对象?

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

string sqlDataReaderFieldNameStringVariable  = reader.GetName(index);

我不能说:

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

我怎样才能做到这一点?

更新:

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

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

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

为什么我必须投它?任何解决方法?谢谢乔恩。

4

2 回答 2

2

你必须先投你ExpandoObject dyn的人IDictionary<string, object>才能做到这一点:

dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";   
于 2012-02-24T21:11:31.713 回答
1

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

dynamic dyn = new ExpandoObject();
var dictionaryView = (IDictionary<string, object>) dyn;
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test";
于 2012-02-24T21:11:47.123 回答