使用XElement类,其构造函数显然将daya类型XName作为其第一个参数,但是,如果我传入一个字符串,它就可以工作,而且我没有得到编译时错误。
这里到底发生了什么,我如何在自己的代码中实现这一点?
谢谢,
答案 0 :(得分:2)
基本上有一个implicit conversion from string to XName
。这就是为什么它也有效:
XName name = "element-name";
如果您提供适当的implicit conversion,则可以使用自己的类型执行此操作 - 但通常我不会执行此操作。 (请注意,您可以在源类型或目标类型中提供转换;在这种情况下,它是提供转换的目标类型(XName
),而不是源类型(string
)。)
LINQ to XML使用运算符和转换重载来做各种有趣的事情,这些事情通常是一个坏主意,但恰好在XML的上下文中工作得很好。我特别喜欢命名空间处理:
XNamespace ns = "some namespace uri";
XName fullName = ns + "element-name";
另一个有用的奇怪之处是从XAttribute和XElement到各种类型的显式转换;例如,你可以这样做:
XAttribute attribute = ...;
int? value = (int?) attribute;
这里的可空性之美是如果attribute
为空,那么结果也是如此。这使您可以非常干净地处理可选属性(和元素)。
答案 1 :(得分:1)
XName
定义了一个特殊的implicit operator。隐式运算符允许您执行隐式类型转换。
答案 2 :(得分:0)