将哈希表转换为数据表的更好方法

有没有更好的方法将哈希表转换为数据表

private DataTable ConvertHastTableToDataTable(System.Collections.Hashtable hashtable) { var dataTable = new DataTable(hashtable.GetType().Name); dataTable.Columns.Add("Key",typeof(object)); dataTable.Columns.Add("Value", typeof(object)); IDictionaryEnumerator enumerator = hashtable.GetEnumerator(); while (enumerator.MoveNext()) { dataTable.Rows.Add(enumerator.Key, enumerator.Value); } return dataTable; } 

这是一种非常简单的方法。 然而, 在这种特殊情况下 ,真正的惯用方法是直接使用foreach构造。

 foreach (DictionaryEntry item in hashtable) { // work with item.Key and item.Value here } 

对于将来的编程,您可能希望继续使用Dictionary集合,它允许比传统的非genericsHashtable更强的类型。 例:

 Dictionary dictionary = new Dictionary(); dictionary.Add("Foo", 1.2); dictionary.Add("Bar", 2.4); foreach (KeyValuePair pair in dictionary) { // work with pair.Key and pair.Value, each strongly typed } 

如果您为数据类型添加扩展名。 可以做什么:

 //imports using MMExtensions; //your namespace namespace MMExtensions { public static class DictionaryExtensions { public static DataTable ToDataTable( this Dictionary hashtable ){ var dataTable = new DataTable(hashtable.GetType().Name); dataTable.Columns.Add("Key", typeof(object)); dataTable.Columns.Add("Value", typeof(object)); foreach (KeyValuePair var in hashtable){ dataTable.Rows.Add(var.Key, var.Value); } return dataTable; } } public static class HashtableExtensions { public static DataTable ToDataTable(this Hashtable hashtable) { var dataTable = new DataTable(hashtable.GetType().Name); dataTable.Columns.Add("Key", typeof(object)); dataTable.Columns.Add("Value", typeof(object)); foreach (DictionaryEntry var in hashtable){ dataTable.Rows.Add(var.Key, var.Value); } return dataTable; } } } 

然后,您可以使用以下来创建表。

 DataTable dt = new Dictionary {{"v1", 1}, {"v2", 2}}.ToDataTable(); DataTable dt2 = new Hashtable(){{"v1", 1}, {"v2", 2}}.ToDataTable(); 

请注意,我没有那么多改变。 C#已经有了hashmap数据结构,它被称为字典。 此外,当循环使用集合时,使用foreach循环要好得多,因为它使用更安全的循环方式。 您也可以使用特殊类型的var ,但我认为它在这里失败了,因为您需要类型信息。

编辑:包含Hashtable扩展名。