我怎样才能得到每个值在一个数组匿名对象在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行)。
我试图做下面的代码,但它只是将我的项目数组中的每个对象添加到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); } }
写一个完全可重用的方法。
编辑改进dynamic创build列
你可以使用reflection:
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); }