如何在C#中将List<object>转换为Hashtable?

19
我有一个对象列表,每个对象包含一个Id、Code和Description。
我需要将此列表转换为Hashtable,使用Description作为键,Id作为值。
这样可以将Hashtable序列化为JSON。
是否有一种方法可以在不编写循环遍历列表中的每个项的情况下,将List<Object>转换为Hashtable?
4个回答

33

假设您的List包含类型为Foo的对象(具有int Id和string Description)。

您可以使用Linq将该列表转换为Dictionary,如下所示:

var dict = myList.Cast<Foo>().ToDictionary(o => o.Description, o => o.Id);

1
那个例子非常恰当。Linq不断解决左右中的问题。 - Paul Shannon
太棒了!这几乎与我刚使用Frank链接中的示例编写的内容完全相同。非常感谢你的帮助 :) - Sam Wessel

5
如果你有Linq的访问权限,你可以使用ToDictionary函数。

0
theList.ForEach(delegate(theObject obj) { dic.Add(obj.Id, obj.Description); });

并行版本非常危险;您假设字典将是线程安全的,但它被记录为是线程安全的。如果有ToDictionary的PFX版本,那可能会有所不同 - 但.Add(...) - 风险高 ;-p - Marc Gravell
1
多么真实! :) 我已经从我的条目中删除了那个实现。 - noocyte
非常好的答案。这是一个推荐。http://diditwith.net/2006/10/05/PerformanceOfForeachVsListForEach.aspx - user366312
JMSA:很棒,看到这样的数字总是很有趣。虽然不会对应用程序性能产生重大影响,但仍然很酷 :) - noocyte

-1

同时也要看看 System.Collections.ObjectModel.KeyedCollection<TKey, TItem>。它似乎更适合你想做的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接