2017-07-07 39 views
0

我試圖通過兩個XElement集合遍歷這樣我就可以對它們進行比較,但我得到的錯誤:無法從樹型視圖轉換爲的XElement

System.InvalidCastException:「無法強制轉換的對象鍵入 'System.Windows.Controls.TreeViewItem'鍵入 'System.Xml.Linq.XElement'。'

我的代碼是:

private void CompareTrees(ItemCollection xml,ItemCollection xsd) 
    {    
     bool isMatch = false; 
     string header = string.Empty;   

     foreach (XElement xexsd in xsd) 
     { 
      foreach (XElement xexml in xml) 
      {      
        if (xexsd.Name.LocalName + " - " + xexsd.Value == xexml.Name.LocalName + " - " + xexsd.Value) 
        { 
        CompareTrees(xml, xsd); 
        isMatch = true; 
        break; 
        }  
      } 
      if (isMatch == true) 
      { 
       continue; 
      } 
      else 
      { 
       var item = new ListBoxItem(); 
       lbItems.Items.Add(item); 
      } 
     }    
    } 
+1

你2個foreach循環把一個斷點,你會看到,在任一XSD或XML(或兩者)的集合是System.Windows.Controls.TreeViewItem的實際集合。因此,您不能將它們轉換爲System.Xml.Linq.XElement,因爲前者不會從後者繼承。 –

+0

謝謝,但我得到的內容不是TreeViewItem庫的一部分 – batbaqna

+0

你在這裏沒有問任何問題。 –

回答

1

顯然,ItemCollection包含TreeViewItems。試試這個:

foreach (TreeViewItem tvi in xml.OfType<TreeViewItem>()) 
{ 
    XElement xexsd = tvi.DataContext as XElement; 
    if (xexsd != null && xexsd.Name.LocalName + " - " + xexsd.Value == xexml.Name.LocalName + " - " + xexsd.Value) 
    { 
     CompareTrees(xml, xsd); 
     isMatch = true; 
     break; 
    } 
} 
+0

好吧,只有一個foreach的兩個集合? – batbaqna

+0

您應該替換您的foreach(xml中的XElement xexml)或其他循環或兩者。根據您提供的信息(缺乏)說不出來。就像我說的那樣,錯誤消息意味着ItemCollection包含TreeViewItems。 – mm8

+0

你試過這個還是發生了什麼? – mm8

相關問題