¿Cuál es la ventaja de usar esto:
DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRowdonde puedes hacer esto:
DataTable CopyToDataTable<T>(this DataRow[] source)Disculpen si es una pregunta tonta, soy nuevo en esto
Creo que hay dos partes en esto.
La primera es que aceptar un IEnumerable es más flexible que aceptar una matriz. ¿Qué pasa si el usuario tiene una List<DataRow> o algún otro tipo de colección? ¿Qué pasa si quieren pasar el resultado de una consulta de linq? Aceptar una matriz los obliga a asignar una nueva matriz solo para pasar a CopyToDataTable , y eso es un costo innecesario.
No hay ninguna razón por la que CopyToDataTable necesite una matriz: solo necesita un IEnumerable . Entonces, es mejor si solo acepta un IEnumerable .
Dicho esto, debido a la covarianza sería posible utilizar la firma:
DataTable CopyToDataTable(this IEnumerable<DataRow> source) ... y los usuarios podrían pasar, por ejemplo, un IEnumerable<TableDetailsRow> (donde TableDetailsRow extiende DataRow ). Sin embargo, la covarianza solo se introdujo en C# 4, y ese método existe desde .NET 3.5, lo que significa que probablemente se escribió en C# 3. Dado que la covarianza no estaba disponible en ese momento, los genéricos eran la siguiente mejor opción.