2012-02-24 28 views
0

如何在運行期間將sqldatareader的字段名稱動態分配給動態對象?在運行時將文字字符串指定爲動態對象的屬性並訪問它

讓我們假設我看過一個SqlDataReader的字段名到一個變量:

string sqlDataReaderFieldNameStringVariable = reader.GetName(index); 

我不能說:

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

我怎麼能這樣做?

UPDATE:

還有時間拿到一分;-)我我DYN對象添加到類型ExpandoObject的列表是一個方法的返回值。當我通過數據訪問列表[0] .test編譯時不存在test屬性???

當我做到這一點的方法返回列表以外的項目:

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

爲什麼我要投它?任何解決方法?謝謝喬恩。

+1

只返回一個列表''代替 – BrokenGlass 2012-02-24 21:59:36

+0

這是偉大的!另一點是你,因爲你是11分鐘前:P – Pascal 2012-02-24 22:11:02

+0

它被稱爲「投票」 - 但由於你只提出了27個問題中的所有27個問題的答案,我不會屏住呼吸;-) – BrokenGlass 2012-02-24 22:37:42

回答

2

你要投你ExpandoObjectdynIDictionary<string, object>首先要做的是:

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

啊愚蠢的我沒有動態需要完全可以:P – Pascal 2012-02-24 21:12:08

+0

string val = dyn.test;狗屎它的作品。動態是很酷的:P @BrokenGlass當我刷新我的瀏覽器時,你是第一個在Jon之前;-) – Pascal 2012-02-24 21:31:53

1

對於動態物體,它的棘手。可行(使用IDynamicMetaObjectProvider)但棘手。如果你真的使用ExpandoObject,這是簡單的,因爲它實現IDictionary<string, object>

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

仍然有時間來得到一個點;-)我將我的dyn對象添加到一個類型爲ExpandoObject的List,它是方法的返回值。當我通過數據訪問列表[0] .test編譯時不存在test屬性??? – Pascal 2012-02-24 21:38:26

+0

@帕斯卡爾:我發現很難解析你的評論 - 但如果你可以把它寫成你的問題的編輯,我會看看我能做些什麼... – 2012-02-24 21:51:26

+0

完成! 123去。 – Pascal 2012-02-24 21:55:12

相關問題