在我们的生产代码中,我看到使用显式XName.Get
调用读取XML属性:
var name = element.Attribute (XName.Get ("name"));
我以前总是将字符串传递给Attribute
:
var name = element.Attribute ("name");
这更具可读性,但我想知道逻辑或性能是否存在差异。
答案 0 :(得分:5)
没有任何区别。
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;
}
答案 1 :(得分:1)
嗯,这有两个部分:
他们是否使用相同的Attribute
方法?
是。只有一个XElement.Attribute
方法,带有XName
参数,这意味着在后一种情况下,您使用隐式字符串进行XName
转换。
XName
转换的隐式字符串是否与XName.Get
相同?
这不保证 - documentation没有提到它。但我没有理由怀疑SLaks的分析,即当前的实现是一样的。
我个人总是使用从字符串到XName
的转换或XNamespace
和字符串之间的加法运算符来获得XName
。我不记得上次我明确提到它了。
可用的转换是关于LINQ to XML的美妙之处 - 忽略它们似乎毫无意义,IMO。