根据函数的参数创建一个对象列表

时间:2015-03-13 04:48:35

标签: c# .net c#-4.0

如何根据函数的参数创建对象列表?以下是我的代码:

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作为参数的函数,它将返回在函数参数中传递的特定类的列表。

如何实施

3 个答案:

答案 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