2011-02-16 22 views
2

我目前正在將部分chem4word項目從C#翻譯成AS3。XElement.Remove()被調用後,C#/ Linq是否可以將XAttribute添加到XElement?

在下面的代碼中,XElement DelegateElement稱其爲Remove()方法。如果mark == true那麼它通過XElement有一個XAttribute "deleted" = "true"但如果該節點已被刪除c#/ Linq實際上做了什麼?

 private XElement DelegateElement; 

     public void DeleteSimple(bool mark) 
     { 
      if (IsDeleted()) 
      { 
       Log.Debug("WARN: Trying to delete previously deleted CMLElement " + GetTag()); 
      } 
      else 
      { 
       if (this.DelegateElement.Parent != null) 
       { 
        /////////////////////////////////////////// 
        // Here, if the XElement is being removed, 
        // where does the MarkAsDeleted method add 
        // the XAttribute? 
        //////////////////////////////////////////// 
        this.DelegateElement.Remove(); 
        if (mark) 
        { 
         MarkAsDeleted(this.DelegateElement); 
        } 
       } 
      } 
     } 


     private void MarkAsDeleted(XElement delegateElement) 
     { 
      // Deleted = "deleted; True = "true" 
      delegateElement.Add(new XAttribute(Deleted, True)); 
     } 

只是爲了'有趣'這裏是as3版本的代碼。按照上面的C#方式,刪除的節點不會獲得添加到xml的新屬性(或任何新信息)。

 private var DelegateElement:XML; 
     public function DeleteSimple(mark:Boolean):void 
     { 
      if(IsDeleted()) 
      { 
       // log output 
      } 
      else 
      { 
       if(this.DelegateElement.parent() != null) 
       { 
        delete this.DelegateElement.parent().children()[this.DelegateElement.childIndex()]; 
        if(mark) 
        { 
         MarkAsDeleted(this.DelegateElement); 
        } 
       } 
      } 
     } 

     private function MarkAsDeleted(delegateElement:XML):void 
     { 
      delegateElement['@'+Deleted] = True; 
     } 

回答

2

調用Remove()只是將元素拉出其父項。
元素本身將繼續正常工作。

+0

真棒,我只是沒有想到,雖然塞納里奧完全。測試它在as3中,看起來像你說的那樣工作。謝謝一堆! – gltovar 2011-02-16 02:01:33

相關問題