多个泛型上的扩展方法
本文关键字:扩展 方法 泛型 | 更新日期: 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>
类型的变量可用。