有什么区别吗?属性("…")属性(XName.(“…“))
本文关键字:quot 属性 XName 什么 区别 | 更新日期: 2023-09-27 18:04:01
在我们的产品代码中,我看到使用显式XName.Get
调用读取XML属性:
var name = element.Attribute (XName.Get ("name"));
我过去总是传递一个字符串给Attribute
:
var name = element.Attribute ("name");
这是更可读的,但我想知道是否有任何不同的逻辑或性能。
没有任何区别。XName
有string
的隐式强制转换,它调用XName.Get
。
你可以在源代码中看到:
/// <summary>
/// Converts a string formatted as an expanded XML name ({namespace}localname) to an XName object.
/// </summary>
/// <param name="expandedName">A string containing an expanded XML name in the format: {namespace}localname.</param>
/// <returns>An XName object constructed from the expanded name.</returns>
[CLSCompliant(false)]
public static implicit operator XName(string expandedName) {
return expandedName != null ? Get(expandedName) : null;
}
这有两个部分:
它们是否调用相同的Attribute
方法?
是的。只有一个XElement.Attribute
方法,带有XName
参数,这意味着在后一种情况下,您将使用隐式字符串到XName
的转换。
隐式字符串到XName
的转换是否与XName.Get
相同?
这不能保证——文档中没有提到。但是我没有理由怀疑SLaks的分析,即当前的实现是相同的。
就我个人而言,我总是使用从字符串到XName
的转换,或者使用XNamespace
和字符串之间的加法运算符来获得XName
。我都不记得上次明确提到它是什么时候了
可用的转换是LINQ到XML的美妙之处之一-在我看来,忽略它们似乎毫无意义。