多个泛型上的扩展方法

本文关键字:扩展 方法 泛型 | 更新日期: 2023-09-27 18:17:58

我找到了下面的"Convert to Datatable"代码,我已经将其更改为IList接口的扩展方法。而不是复制和粘贴代码再次在我的库中,我想也使以下工作为iccollection。我可以复制并粘贴代码并更改顶部的illist,然后我将拥有相同脚本的两个副本。

public static DataTable ConvertToDatatable<T>(this IList<T> data)
{
    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
    DataTable dataTable = new DataTable();
    for (int i = 0; i < props.Count; i++)
    {
        PropertyDescriptor prop = props[i];
        dataTable.Columns.Add(prop.Name, prop.PropertyType);
    }
    object[] values = new object[props.Count];
    foreach (T item in data)
    {
        for (int i = 0; i < values.Length; i++)
        {
            values[i] = props[i].GetValue(item);
        }
        dataTable.Rows.Add(values);
    }
    return dataTable;
}

我甚至试过把第一行改成

public static DataTable ConvertToDatatable<T>(this N<T> data) where N : IList<T>, ICollection<T>

但是运气不好。是否有可能使扩展工作在多个集合类型?

多个泛型上的扩展方法

由于IList<T>ICollection<T>,因此仅在ICollection<T>类型上定义扩展方法就足够了。它应该自动对IList<T>类型的变量可用。