Может ли C # / Linq добавить XAttribute к XElement после вызова XElement.Remove ()? - PullRequest
2 голосов
/ 16 февраля 2011

В настоящее время я перевожу части проекта chem4word из C # в AS3.

В приведенном ниже коде 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;
        }

1 Ответ

2 голосов
/ 16 февраля 2011

Вызов Remove() просто вытаскивает элемент из его родителя.
Сам элемент будет продолжать работать нормально.

...