如何将这个foreach转换为Linq?

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

xDictionary 是一个已经存在并包含一些项的字典,还是它总是为空(即你需要从头开始构建它)?如果它已经存在,那么 LINQ 并不是你应该在这里使用的工具。 - Jeff Mercado
3个回答

4

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

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

2

好的,可以使用 提供索引的Select重载ToDictionary来实现这个功能:

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

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

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);
        }
    }

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