c语言编程笔录

您现在的位置是:首页 > C语言 > C#

C#

C#中将DataTable转化成List<T>的方法解析

张吉惟 2023-08-13C#
前言在C#中,我们常常需要将DataTable转换成List的数据结构。这样做的好处是可以方便地对数据进行操作和处理,同时提高代码的可读性和性能。本文将介绍一种常见

前言

在C#中,我们常常需要将DataTable转换成List<T>的数据结构。这样做的好处是可以方便地对数据进行操作和处理,同时提高代码的可读性和性能。本文将介绍一种常见的方法来实现DataTable到List<T>的转换。

方法解析

要将DataTable转化成List<T>,我们可以使用反射来实现。以下是具体的步骤:

  1. 创建一个泛型方法,输入参数为DataTable和泛型类型T,并返回一个List<T>。
  2. 通过反射获取T类型的所有属性。
  3. 遍历DataTable的每一行,创建一个T类型的对象。
  4. 使用反射将DataTable的每一列的值赋给T对象的属性。
  5. 将T对象添加到List<T>中。
  6. 返回List<T>。

下面是一个示例代码:

public List<T> DataTableToList<T>(DataTable dt) where T : new()
{
    List<T> resultList = new List<T>();
    PropertyInfo[] properties = typeof(T).GetProperties();

    foreach (DataRow row in dt.Rows)
    {
        T item = new T();

        foreach (PropertyInfo property in properties)
        {
            if (dt.Columns.Contains(property.Name))
            {
                property.SetValue(item, row[property.Name]);
            }
        }

        resultList.Add(item);
    }

    return resultList;
}

代码解释

上述代码中,我们定义了一个泛型方法DataTableToList<T>来实现DataTable到List<T>的转换。使用Where约束T是为了限制T类型必须有一个无参构造函数,这样我们才能使用new关键字创建对象。

在方法体中,我们首先创建了一个空的List<T> resultList,用于存储转换后的对象。然后使用typeof(T).GetProperties()通过反射获取了T类型的所有属性。

接下来,我们遍历DataTable的每一行,创建了一个新的T类型的对象item。然后,再对每一个属性进行遍历,判断DataTable中是否存在对应的列。如果存在,就使用反射的SetValue方法将DataTable对应列的值赋给T对象的属性。

最后,将T对象添加到resultList中,并在循环结束后返回resultList。

总结

通过使用反射,我们可以将DataTable转换成List<T>,从而方便地对数据进行操作和处理。这种方法可以减少手动编写转换代码的工作量,提高代码的可读性和性能。

文章评论