使用它有什么好处:
DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow
在哪里你可以这样做:
DataTable CopyToDataTable<T>(this DataRow[] source)
对不起,如果这是一个愚蠢的问题,我是新手
最佳答案
我认为这有两个部分。
首先是接受 IEnumerable
比接受数组更灵活。如果用户有 List<DataRow>
怎么办? ,或其他一些集合类型?如果他们想传递 linq 查询的结果怎么办?接受一个数组迫使他们分配一个新数组只是为了传递给 CopyToDataTable
,这是不必要的成本。
没有理由 CopyToDataTable
需要一个数组:它只需要一个 IEnumerable
.所以最好它只接受 IEnumerable
.
也就是说,由于 covariance可以使用签名:
DataTable CopyToDataTable(this IEnumerable<DataRow> source)
... 用户将能够通过例如一个IEnumerable<TableDetailsRow>
(其中 TableDetailsRow
扩展 DataRow
)。但是,协方差仅在 C# 4 中引入,并且 that method自 .NET 3.5 以来一直存在,这意味着它可能是用 C# 3 编写的。由于当时协方差不可用,泛型是下一个最好的东西。
关于c# - 为什么要使用通用类型然后将其限制为具有 "where"的一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68618503/
相关文章:
google-app-engine - F4_1G 是否属于 google app engine f
rust - 是否可以在不复制数据的情况下将 Vec<&[u8]> 展平为 &[u8] ?
python - 如何创建嵌套列表并在每个嵌套中放置特定数量的元素?列表和它的嵌套元素总是不一样的
typescript - 如何在 TypeScript 中有选择地将属性从一个对象复制到另一个对象
javascript - 我如何在 Next.js 中删除 ID 为 ="__next"的 div
c++ - 如何将 C 类型可变参数转换为 C++ 样式可变参数类型?
c++ - 来自具有大小的 char * 缓冲区的双向迭代器