c# - 为什么 XElement 的行为不像引用类型?
问题描述
我注意到这XElement
是一门课,所以我尝试了类似的方法:
var doc = new XDocument(
new XDeclaration("1.0", "utf8", "yes"),
new XElement("Root")
);
var root = doc.Root;
var com = new XElement("Component", new XAttribute("name", "arm"));
root.Add(com);
root.Add(com);
root.Add(com);
com.Add(new XAttribute("type", 1));
Console.WriteLine(doc);
但输出是:
<Root>
<Component name="arm" type="1" />
<Component name="arm" />
<Component name="arm" />
</Root>
我也试过SetAttributeValue()
了,得到了同样的结果。
为什么 type 属性只附加到第一个组件?
解决方案
我最初的答案是(本质上是“设计”),这就是为什么......
从MS 文档(并按照相关链接),您会发现
XElement
继承XContainer
继承XNode
XContainer
具有方法Add()
和属性FirstNode
,并且LastNode
XNode
有属性NextNode
和PreviousNode
如果Add()
盲目地添加对同一对象的引用而不在必要时创建副本以避免多重引用,那么如何避免循环引用?在上面的示例中,FirstNode
并且FirstNode.NextNode
将引用相同的对象。
推荐阅读
- r - 在闪亮的应用程序中加载 rhandsontable 时,如何通过 updateSliderInput 更新滑块?
- angular - 使用 Angular-Cli 加载外部框架
- model-view-controller - Umbraco 问题得到寒冷的属性
- java - java.lang.IllegalArgumentException 如果尝试读取 Excel 表,则会出现异常
- eclipselink - Eclipselink 共享缓存 - 延迟关联
- python - xgboost 错误:不是有效的 Win32 应用程序
- javascript - 移动设备上的 Google 地图缩放级别
- jquery - 如何在剃刀页面中为模型提供 ID 以在 jquery 脚本中使用
- sql - msg 8152 级别 16 状态 2 字符串或二进制数据将被截断
- c++ - 如何在 C++ 中的 .so 文件中包含库