如何将这个foreach转变为Linq?

时间:2010-11-11 08:45:25

标签: c# linq

int j = 0;  
foreach (var e in XmlData.Elements())  
{  
   xDictionary.Add(j++, e.Value);  
}  

3 个答案:

答案 0 :(得分:4)

如果键只是位置索引,则可能不应该使用字典。我建议改用一个列表:

var xList = XmlData.Elements().ToList();

答案 1 :(得分:2)

嗯,这样做会使用the overload of Select which provides the indexToDictionary

var dictionary = XmlData.Elements()
                        .Select((value, index) => new { value, index })
                        .ToDictionary(x => x.index, x => x.value);

假设xDictionary在你开始之前是空的。

答案 2 :(得分:1)

像这样:创建一个新词典:

var dict = XmlData.Elements()
        .Select((e, i) => new {Element = e, Index = i})
        .ToDictionary(p => p.Index, p => p.Element.Value);

此外,如果您想要添加到现有词典,您可以使用AddRange便利扩展方法:

xDictionary.AddRange(XmlData.Elements()
                    .Select((e, i) => new KeyValuePair<int, string>(i, e.Value)));

扩展方法实现:

    public static void AddRange<T>(this ICollection<T> source, IEnumerable<T> elements)
    {
        foreach (T element in elements)
        {
            source.Add(element);
        }
    }