¿Cómo se crea un método que convierte una DataRowCollection a una matriz de objetos de un tipo genérico en C #?

StackOverflow https://stackoverflow.com/questions/2809419

  •  25-09-2019
  •  | 
  •  

Pregunta

Estoy intentando crear un método que toma un DataTable o una DataRowCollection y la convierte en una matriz de un tipo genérico. Algo como esto:

    public static T[] ConvertToArray<T>(DataTable dataTable)
    {
        List<T> result = new List<T>();

        foreach (DataRow dataRow in dataTable.Rows)
            result.Add((T)dataRow);

        return result.ToArray();
    }

El problema es esta línea

result.Add((T)dataRow);

que da lata no convertir System.Data.DataRow a T.

Si hago lo mismo sin necesidad de utilizar un tipo genérico, y asegurarse de la clase de los objetos tienen un operador de conversión personalizado definido, el código funciona bien.

Así que la pregunta ahora es, ¿cómo puedo sacar esto de la utilización de los genéricos?

¿Fue útil?

Solución

Se podría utilizar un objeto que proporciona la conversión en un DataRow a su tipo:

public interface IDataRowConverter<T>
{
    T Convert(DataRow row);
}

Proporcionar su convertidor de encargo a su función:

public static T[] ConvertToArray<T>(DataTable dataTable, IDataRowConverter<T> converter)
{
    List<T> result = new List<T>();

    foreach (DataRow dataRow in dataTable.Rows)
        result.Add(converter.Convert(dataRow));

    return result.ToArray();
}

A continuación, implementa la interfaz necesaria para su tipo:

public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
    public MyObject Convert(DataRow row)
    {
        MyObject myObject = new MyObject();

        // Initialize object using the row instance

        return myObject;
    }
}

A continuación, puede llamar a su función utilizando este código:

MyObject[] objectArray = 
    ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top