XObjectChange 列挙型
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
XObjectに対してイベントが発生したときのイベントの種類を指定します。
public enum class XObjectChange
public enum XObjectChange
type XObjectChange =
Public Enum XObjectChange
- 継承
フィールド
| 名前 | 値 | 説明 |
|---|---|---|
| Add | 0 | XObjectがXContainerに追加されたか、追加されます。 |
| Remove | 1 | XObjectがXContainerから削除されたか、削除されます。 |
| Name | 2 | XObjectが変更されたか、名前が変更されます。 |
| 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 ツリーを変更するすべての操作は、一連のプリミティブに分割されます。 プリミティブには 4 種類あります。 2 つのプリミティブ (Add と Remove) がコレクションに対して動作します。 そのうちの 2 つ (名前と値) はインスタンスに対して動作します。 これらのプリミティブごとに対応するイベントがあります。
これらのイベントの 1 つ内で XML ツリーを変更する場合は、予期しない結果が発生する可能性があるため、注意が必要です。 たとえば、 Changing イベントを受け取り、イベントの処理中にツリーからノードを削除すると、 Changed イベントを受け取らない可能性があります。 イベントが処理されている場合、イベントを受信しているノードを含む XML ツリー以外の XML ツリーを変更することは有効です。変更がイベントが発生した特定のノードに影響を与えない場合は、同じツリーを変更することさえ有効です。 ただし、イベントを受信するノードを含むツリーの領域を変更すると、受信したイベントとツリーへの影響は未定義になります。