De nombreux développeurs C # rencontrent le défi de convertir les listes génériques en dataTables. Bien que la réflexion offre une solution, des méthodes plus efficaces existent. Cet article explore les approches optimales.
Pour les performances supérieures, la bibliothèque FastMember (disponible via NuGet) est fortement recommandée:
<code class="language-csharp">IEnumerable<sometype> data = ...; DataTable table = new DataTable(); using(var reader = ObjectReader.Create(data)) { table.Load(reader); }</code>
Avant .NET 3.5, les développeurs se sont appuyés sur la réflexion ou l'hyperdéscripteur (disponible en .NET 2.0):
<code class="language-csharp">public static DataTable ToDataTable<T>(this IList<T> data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, prop.PropertyType); } foreach (T item in data) { DataRow row = table.NewRow(); for (int i = 0; i < props.Count; i++) { row[i] = props[i].GetValue(item); } table.Rows.Add(row); } return table; }</code>
Pour maximiser les performances, l'activation de l'hyperdéscripteur pour le type d'objet est cruciale. Les tests de référence révèlent des améliorations de vitesse substantielles:
En utilisant ces techniques, les développeurs peuvent améliorer considérablement l'efficacité de la conversion des listes génériques en données dans leurs applications C #.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!