将不同的数据类型传递到需要不同数据类型的方法中

时间:2010-02-24 09:27:46

标签: c# linq-to-xml

使用XElement类,其构造函数显然将daya类型XName作为其第一个参数,但是,如果我传入一个字符串,它就可以工作,而且我没有得到编译时错误。

这里到底发生了什么,我如何在自己的代码中实现这一点?

谢谢,

3 个答案:

答案 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)

XName隐式转换为字符串和从字符串转换。

请参阅MSDN

XName不包含任何公共构造函数。相反,此类提供从String的隐式转换,允许您创建XName。