首頁 > 後端開發 > C++ > 如何有效地將通用列表轉換為.NET中的DataTables?

如何有效地將通用列表轉換為.NET中的DataTables?

Linda Hamilton
發布: 2025-01-30 21:36:12
原創
670 人瀏覽過

高效將通用列表轉換為.NET中的DataTable

在.NET中,您可能會遇到需要將泛型列表或可枚舉對象轉換為DataTable對象的場景。雖然沒有內置的靜態方法可以進行這種轉換,但可以採用多種方法。

使用FastMember

在.NET Framework 4.5或更高版本中,您可以使用NuGet中的FastMember庫。此庫提供高性能的元編程功能:

<code class="language-csharp">using FastMember;
using System.Data;

IEnumerable<sometype> data = ...;
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(data))
{
    table.Load(reader);
}</code>
登入後複製

使用反射

在.NET Framework 4.5之前,您可以使用反射從泛型列表動態創建DataTable。與FastMember相比,這是一種效率較低的方法:

<code class="language-csharp">public static DataTable ToDataTable<T>(this IList<T> data)
{
    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
    DataTable table = new DataTable();
    for (int i = 0; i < props.Count; i++)
    {
        PropertyDescriptor prop = props[i];
        table.Columns.Add(prop.Name, prop.PropertyType);
    }
    foreach (T item in data)
    {
        DataRow row = table.NewRow();
        for (int i = 0; i < props.Count; i++)
        {
            row[i] = props[i].GetValue(item);
        }
        table.Rows.Add(row);
    }
    return table;
}</code>
登入後複製

此函數可以調用任何泛型列表,生成一個基於列表對象屬性的列的DataTable。

性能注意事項

FastMember方法比基於反射的方法快得多。但是,DataTable的性能仍然有改進的空間,因為它的性能特徵可能會根據數據量和列數等因素而有所不同。

How Can I Efficiently Convert Generic Lists to DataTables in .NET?

以上是如何有效地將通用列表轉換為.NET中的DataTables?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板