XObjectChange 列舉

定義

引發 XObject 的事件時,指定事件型別。

public enum class XObjectChange
public enum XObjectChange
type XObjectChange = 
Public Enum XObjectChange
繼承
XObjectChange

欄位

Add 0

XObject 已經加入或將要加入 XContainer

Name 2

XObject 已經重新命名或將要重新命名。

Remove 1

XObject 已經從 XContainer 中移除或將要移除。

Value 3

XObject 的值已經變更或將要變更。 此外,空項目的序列化變更 (由空標記變更為開頭/結尾標記對,反之亦然) 會觸發此事件。

範例

下列範例會藉由將專案新增至樹狀結構來引發事件。

XElement root = new XElement("Root", "content");  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Add(new XElement("Child", "child content"));  

這個範例會產生下列輸出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Add  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Add  

下列範例會從樹狀結構中移除專案來引發事件。

XElement root = new XElement("Root",  
    new XElement("Child", "content")  
);  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Element("Child").Remove();  

這個範例會產生下列輸出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Remove  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Remove  

下列範例會藉由變更專案的名稱來引發事件。

XElement root = new XElement("Root", "content");  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Name = "NewName";  

這個範例會產生下列輸出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Name  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Name  

下列範例會藉由設定屬性的值來引發事件。

XElement root = new XElement("Root",  
    new XAttribute("Att", "att value")  
);  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.FirstAttribute.Value = "new contents";  

這個範例會產生下列輸出:

Changing event raised  
  Sender: System.Xml.Linq.XAttribute  
  Changing: Value  
Changed event raised  
  Sender: System.Xml.Linq.XAttribute  
  Changed: Value  

備註

這會 enum 在 引發 XObject 事件時指定事件種類。

修改 XML 樹狀結構的所有作業都會細分成一系列基本類型。 基本類型有四種。 兩個基本類型 (新增和移除) 對集合採取行動。 其中兩個 (Name 和 Value) 實例上作用。 每個基本類型都有對應的事件。

在上述其中一個事件內修改 XML 樹狀結構時,您應該小心,因為這麼做可能會導致非預期的結果。 例如,如果您收到 Changing 事件,而且正在處理事件時,您會從樹狀結構中移除節點,則可能不會收到 Changed 事件。 正在處理事件時,修改包含接收事件的節點以外的 XML 樹狀結構是有效的;即使修改相同的樹狀結構也有效,前提是修改不會影響引發事件的特定節點。 不過,如果您修改包含接收事件的節點的樹狀結構區域,您收到的事件和對樹狀結構的影響是未定義的。

適用於

另請參閱