0
我很驚訝地看到,並非所有我在下面的代碼元素被迭代:迭代的IEnumerable與linq2xml
IEnumerable<XElement> dataStorageGroupElements = document.Descendants().Where(x => "Xms.Common.DataStorageGroup" == (string)x.Attribute("NodeType"));
int counter = 0;
foreach (XElement dataStorageGroupElement in dataStorageGroupElements)
{
Console.WriteLine($"Counter={counter++}, NbElements={dataStorageGroupElements.Count()}");
XElement newParent = GetNewParentForDataStorageGroup(dataStorageGroupElement);
dataStorageGroupElement.Remove();
newParent.Add(dataStorageGroupElement);
}
輸出是:
Counter=0, NbElements=12
Counter=1, NbElements=12
Counter=2, NbElements=12
Counter=3, NbElements=12
Counter=4, NbElements=12
Counter=5, NbElements=12
Counter=6, NbElements=12
更改代碼來執行枚舉與ToArray()修復此問題:
IEnumerable<XElement> dataStorageGroupElements = document.Descendants().Where(x => "Xms.Common.DataStorageGroup" == (string)x.Attribute("NodeType")).ToArray();
用上面的代碼計數器正在增加ent to 11.
爲什麼有些元素被跳過描述爲here。但爲什麼NbElements總是12?是否僅在第一次評估?
您的意思是linq to xml? – Cosmin
@Cosmin是的,我確實:/修正了 – Philippe