如果向数据类型添加扩展名。可以做什么:
//imports
using MMExtensions;
//your namespace
namespace MMExtensions {
public static class DictionaryExtensions {
public static DataTable ToDataTable<TKey, TValue>(
this Dictionary<TKey, TValue> hashtable
){
var dataTable = new DataTable(hashtable.GetType().Name);
dataTable.Columns.Add("Key", typeof(object));
dataTable.Columns.Add("Value", typeof(object));
foreach (KeyValuePair<TKey, TValue> 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<string, int> {{"v1", 1}, {"v2", 2}}.ToDataTable();
DataTable dt2 = new Hashtable(){{"v1", 1}, {"v2", 2}}.ToDataTable();
请注意,我没有改变那么多。 C#已经有hashmap数据结构,它被称为字典。另外,当循环集合时,使用foreach循环会更好,因为它使用更安全的方式来循环。你也可以使用特殊类型var
,但是我认为它在这里击败了目的,因为你需要类型信息。
编辑:包括散列表扩展名。
我大多不使用C#,但我不明白为什么你的答案是更好的评价。也许你可以解释。例如1)IDictionaryEnumerator没有实现IDisposable接口,所以垃圾回收器不能处理它。当使用'using'关键字时,这会自动调用 - 我认为你甚至不能编译它。 2)'foreach(集合中的var项)' - 什么是项目? ...编译器不知道,所以你需要投2次元素,打败使用var的目的。 – Margus 2011-04-08 15:46:05
@玛格斯,你说的没错。我的答案是从泛型集合的角度编写的,因为'IEnumerator'实现了'IDisposable'。 'IEnumerator',这是什么将用于旧版集合,不。如果这是'字典',我的答案会更合适。 –
2011-04-13 05:06:16