Come faccio a creare un metodo che converte un DataRowCollection ad un array di oggetti di un tipo generico in C #?
Domanda
Sto cercando di creare un metodo che accetta un DataTable o un DataRowCollection e lo converte in un array di un tipo generico. Qualcosa di simile a questo:
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();
}
Il problema è questa linea
result.Add((T)dataRow);
che dà non può convertire System.Data.DataRow a T.
Se faccio la stessa cosa senza l'utilizzo di un tipo generico, e assicurarsi che la classe degli oggetti hanno un operatore di conversione personalizzato definito, il codice funziona bene.
Quindi la domanda è ora, come faccio a tirare questo di usare farmaci generici?
Soluzione
Si potrebbe utilizzare un oggetto che fornisce la conversione in un DataRow al tipo:
public interface IDataRowConverter<T>
{
T Convert(DataRow row);
}
Fornire il convertitore personalizzato per la funzione:
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();
}
Quindi, implementare l'interfaccia per il vostro tipo di necessaria:
public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
public MyObject Convert(DataRow row)
{
MyObject myObject = new MyObject();
// Initialize object using the row instance
return myObject;
}
}
È possibile quindi chiamare la funzione utilizzando questo codice:
MyObject[] objectArray =
ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());