簡體   English   中英

如何在C#中的數組匿名對象中獲取每個值

[英]How can I get each value inside an array anonymous object in c#

我有一個這樣的對象數組

var items = new object[]
{
    new {name= "house",code=1,price= 30},
    new {name= "water",code=2,price= 323},
    new {name= "food",code=3,price= 45}
};

我想通過具有參數是對象數組的方法將這些值中的每一個添加到數據表行(因此1個對象-1行)中。

我嘗試像下面的代碼一樣,但是它只是將我的items數組中的每個對象添加到excel文件中的表格單元格中(我已經在數據表中添加了標頭)

public void Create(object[] items)
{
    // table headers are created before this line.......
    var table = new DataTable();
    table.Rows.Add(items);
}

因此,我需要做的事情,例如如何遍歷數組並獲取其每個值以分配給一行。 我文件中的預期結果:

Name   Code   Price
===================
house   1      30
water   2      323
food    3      45

謝謝(如果我的問題不夠清楚,請發表評論)

你應該做

public void Create<T>(T[] items)
{

    var table = new DataTable();
    var props = typeof(T).GetProperties();
    // Dynamically create headers
    foreach(var p in props)
    {
        if(!table.Columns.Contains(p.Name))
           table.Columns.Add(p.Name, p.ReturnType);
    }

    // Dynamically add values
    foreach(var o in items)
    {
        var row = table.NewRow();
        foreach(var p in props)
        {
           row[p.Name] = p.GetValue(o);
        }
        table.Rows.Add(row);
    }
}

編寫一個完全可重用的方法。

編輯改進的列動態創建

您可以使用反射:

var table = new DataTable();
table.Columns.Add("name", typeof(string));
table.Columns.Add("code", typeof(int));
table.Columns.Add("price", typeof(double));

foreach(var obj in items) {
    var row = table.NewRow();
    row["name"] = obj.GetType().GetProperty("name").GetValue(obj, null);
    row["code"] = obj.GetType().GetProperty("code").GetValue(obj, null);
    row["price"] = obj.GetType().GetProperty("price").GetValue(obj, null);
    table.Rows.Add(row);
}

您需要首先添加列。

var table = new DataTable();
table.Columns.Add("name");
table.Columns.Add("code");
table.Columns.Add("price");

foreach (var item in items)
{
  table.Rows.Add(item);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM