在我们的生产代码中,我看到使用显式XName.Get
调用读取 XML 属性:
var name = element.Attribute (XName.Get ("name"));
我以前总是将字符串传递给Attribute
:
var name = element.Attribute ("name");
这更具可读性,但我想知道逻辑或性能是否有任何差异。
在我们的生产代码中,我看到使用显式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 to XML 的优点之一——忽略它们似乎毫无意义,IMO。