C#對我而言只是會用而已,有些語法還不是很了解,今天遇到一個問題不清楚是C#的限制還是Bug?
我使用XmlDocument讀取xml文件,並檢查文件中的Bookmark元素們的Bookmarkname屬性,當屬性不存在或為空字元(“”)時視為舊版本,從Filename屬性讀出資料更新Bookmarkname屬性。
原本是使用C#的foreach來檢查每個Bookmark元素
1: var elements = _xmlProject.GetElementsByTagName("Bookmark");
2: foreach(var element in elements)
3: {
4: String bookmarkname = element.GetAttribute(@"Bookmarkname");
5: if (bookmarkname == null || bookmarkname == "")
6: {
7: bookmarkname = element.GetAttribute(@"Filename");
8: element.SetAttribute(@"Bookmarkname", bookmarkname);
9: }
10: }
不過當發現元素為舊版格式不存在Bookmarkname屬性而呼叫SetAttribute後,下一筆element讀取時一定會發生Invalidate exception,若改為for語法就一切正常,更改後為
1: var elements = _xmlProject.GetElementsByTagName("Bookmark");
2: int count = elements.Count;
3: for(int i=0 ; i<count ; i++)
4: {
5: var element = elements[i] as XmlElement;
6:
7: String bookmarkname = element.GetAttribute(@"Bookmarkname");
8: if (bookmarkname == null || bookmarkname == "")
9: {
10: bookmarkname = element.GetAttribute(@"Filename");
11: element.SetAttribute(@"Bookmarkname", bookmarkname);
12: }
13: }
所以是C#的foreach並不是list的形式所以資料集合不能有記憶體配置的變化?還只是單純的bug?
沒有留言:
張貼留言