2016-12-06 97 views
0

我有一個Excel單元格。我想在運行時讀取和填充一個對象。 這是我試過的。動態填充C中的對象#

dynamic Common = new JObject(); 

foreach (DataRow dsRow in dtTable.Rows) 
{ 
    // On all tables' columns 
    foreach(DataColumn dc in dtTable.Columns) 
    { 

    var columnName = dc.ColumnName; 
     Common.columnName = dsRow[dc].ToString(); 
    } 
} 

但這裏的問題是dtoCommonTag.columnName是從dsRow[dc].ToString()所有列不變。

如何動態更改的值常見的

回答

1

兩個選項:

你試過

Common[columnName] = dsRow[dc].ToString(); 

最壞的情況,你可以寫一個switch語句來影響每一列。它不會很漂亮,但它會起作用。

+0

第二種選擇是什麼? –

+0

@ThorstenDittmar答案就在這裏:「寫一個switch語句來影響每一列」。 – hvd

0

使用「反射」。 然後,您可以將屬性名稱作爲字符串值傳遞,然後將值傳遞給該屬性。 Try this

FieldInfo info = typeof(Common).GetField(dc.ColumnName); 
info.SetValue(null, dsRow[dc].ToString()) 
1

也就是說dynamic對象不是如何工作的。您可以動態地將屬性添加到動態對象,但不能「按字符串」。

你可以,但是,使用的ExpandoObject做到這一點:

var x = new ExpandoObject() as IDictionary<string, Object>; 
x.Add(columnName, dsRow[dc].ToString()); 

dynamic dyn = x; 

然後你可以使用列名作爲屬性。