4

如何使用 Linq创建一个Dictionary(甚至更好的一个)?ConcurrentDictionary

例如,如果我有以下 XML

<students>
    <student name="fred" address="home" avg="70" />
    <student name="wilma" address="home, HM" avg="88" />
    .
    . (more <student> blocks)
    .
</students>

加载XDocument doc;并想要填充一个ConcurrentDictionary<string, Info>(其中键是名称,并且Info是某个类持有地址和平均值。填充Info现在不是我关心的问题),我该怎么做?

4

2 回答 2

9
XDocument xDoc = XDocument.Parse(xml);
var dict = xDoc.Descendants("student")
                .ToDictionary(x => x.Attribute("name").Value, 
                              x => new Info{ 
                                  Addr=x.Attribute("address").Value,
                                  Avg = x.Attribute("avg").Value });


var cDict = new ConcurrentDictionary<string, Info>(dict);
于 2012-11-19T10:36:21.693 回答
3

这样的事情会做:

var dict = xml.Descendants("student")
              .ToDictionary(r => (string)r.Attribute("name").Value, r => CreateInfo(r));

这产生了一个平常的Dictionary; 您可以ConcurrentDictionary 从通常的Dictionary.


编辑:更改ElementAttribute,感谢@spender 注意到这一点。还有“学生”->“学生”,感谢@Jaroslaw。

于 2012-11-19T10:37:07.397 回答