有什么区别吗?属性("…")属性(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.(“…“))

没有任何区别。
XNamestring的隐式强制转换,它调用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的美妙之处之一-在我看来,忽略它们似乎毫无意义。