2017-04-07 58 views
3

我需要在運行時創建動態對象及其屬性,然後創建此對象的實例以存儲值。在運行時從列表創建對象及其屬性

爲什麼我要上面的邏輯!

我正在閱讀C#中的excel文件,第一行代碼是header,它實際上是屬性,後面跟着每行都是記錄,它是動態對象的實例。

List<string> ExcelDataHeader = new List<string>(); 
     for (int y = 2; y <= colCount; y++) 
      { 
      ExcelDataHeader.Add(xlRange.Cells[headerRow, y].Value2.ToString()); 
      } 

    dynamic MyDynamic = new System.Dynamic.ExpandoObject(); 
    ?????????? 

我需要返回讀取Excel中的對象數據

+1

通常你使用'MyDynamic.PropertyName = value'來設置合約。在你的情況下'value'可能來自工作表,所以它就像'MyDynamic.PropertyName = ExcelDataHeader [3]'。我不明白你的問題是什麼。 – HimBromBeere

+0

[動態添加C#屬性在運行時]可能的重複(http://stackoverflow.com/questions/15819720/dynamically-add-c-sharp-properties-at-runtime) – Clint

+1

爲什麼要創建一個動態對象?只需將您的值存儲在「Dictionary」中。對我來說似乎更簡單。 – DavidG

回答

2

可以使用ExpandoObject在這裏 - 它會工作,但你需要使用字典API:

IDictionary<string, object> obj = new ExpandoObject(); 
obj["id"] = 123; 
obj["name"] = "Fred"; 

// this is the "dynamic" bit: 
dynamic dyn = obj; 
int id = dyn.id; // 123 
string name = dyn.name; // "Fred" 

然而,我沒有看到這一點。由於您不會在obj.PropertyName之類的東西中引用C#代碼中的對象,因此dynamic的用途很小。您不妨將每條記錄存儲在Dictionary<string,object>或類似的地方。 根據你所描述的,沒有地方你會實際使用MyDynamic作爲dynamic對象。