0

在我们的生产代码中,我看到使用显式XName.Get调用读取 XML 属性:

var name = element.Attribute (XName.Get ("name"));

我以前总是将字符串传递给Attribute

var name = element.Attribute ("name");

这更具可读性,但我想知道逻辑或性能是否有任何差异。

4

2 回答 2

6

没有任何区别。
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;
}
于 2011-07-29T12:59:12.090 回答
1

嗯,这有两个部分:

他们是否调用相同的Attribute方法?

是的。只有一个XElement.Attribute方法,带有一个XName参数,这意味着在后一种情况下,您正在使用隐式字符串进行XName转换。

XName要转换的隐式字符串是否与XName.Get?

这不能保证 -文档没有提到它。但我没有理由怀疑 SLaks 的分析,即当前的实现是相同的。


就我个人而言,我总是使用从字符串到的转换XName或与字符串之间的加法运算符XNamespace来获得XName. 我不记得我上次明确提到它是什么时候了。

可用的转换是 LINQ to XML 的优点之一——忽略它们似乎毫无意义,IMO。

于 2011-07-29T13:03:31.123 回答