如何根据函数的参数创建对象列表?以下是我的代码:
List<ItemMaster> list = new List<ItemMaster>();
foreach (DataRow row in resp.DataSet.Tables[0].Rows)
{
ItemMaster item = new ItemMaster();
foreach (PropertyInfo vr in item.GetType().GetProperties())
{
if (resp.DataSet.Tables[0].Columns.Contains(vr.Name.ToString()))
{
vr.SetValue(item, Convert.ChangeType(row[vr.Name], vr.PropertyType), null);
}
}
list.Add(item);
}
我有像ItemMaster这样的多个类,所以想要创建一个以DataTable和Class作为参数的函数,它将返回在函数参数中传递的特定类的列表。
如何实施
答案 0 :(得分:4)
如果我理解正确,您似乎无法想出一个适用于任意项类型的单个方法实现。如果这是正确的,那么这样的事情可能适合你的情况:
List<T> FillListFromTable<T>(DataTable dataTable) where T : new()
{
List<T> list = new List<T>();
foreach (DataRow row in dataTable.Rows)
{
T item = new T();
foreach (PropertyInfo vr in typeof(T).GetProperties())
{
if (dataTable.Columns.Contains(vr.Name))
{
vr.SetValue(item,
Convert.ChangeType(row[vr.Name], vr.PropertyType), null);
}
}
list.Add(item);
}
return list;
}
您可以这样称呼它:
List<ItemMaster> itemMasterList = FillListFromTable<ItemMaster>(resp.DataSet.Tables[0]);
答案 1 :(得分:0)
只需使用通用。作为奖励,您可以返回通用列表。
List<T> ToList<T>(DataSet dataset): new()
{
List<T> list = new List<T>();
foreach (DataRow row in resp.DataSet.Tables[0].Rows)
{
T item = new T();
foreach (PropertyInfo vr in item.GetType().GetProperties())
{
if (resp.DataSet.Tables[0].Columns.Contains(vr.Name.ToString()))
{
vr.SetValue(item, Convert.ChangeType(row[vr.Name], vr.PropertyType), null);
}
}
list.Add(item);
}
}
答案 2 :(得分:-1)
您可以使用Generic方法,All类可以实现特定的接口。
public IList<T> CreateList<T>(Datatable table) where T : IInterface