el.Attribute(“...”)和el.Attribute(XName.Get(“...”))之间有区别吗?

时间:2011-07-29 12:58:14

标签: c# linq-to-xml xelement xattribute xname

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

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

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

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

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

2 个答案:

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