Есть ли разница между el.Attribute ("...") и el.Attribute (XName.Get ("..."))? - PullRequest
0 голосов
/ 29 июля 2011

В нашем производственном коде я видел, что атрибуты XML читаются с использованием явного вызова XName.Get:

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

Я всегда передавал строку в Attribute:

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

Это более читабельно, но мне интересно, есть ли разница в логике или производительности.

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Нет никакой разницы.
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 голос
/ 29 июля 2011

Ну, есть две части к этому:

Они вызывают один и тот же Attribute метод?

Да. Существует только один метод XElement.Attribute с параметром XName, что означает, что в последнем случае вы используете неявную строку для преобразования XName.

Преобразует ли неявная строка в XName то же самое, что и XName.Get?

Это не гарантировано - документация не упоминает об этом. Но у меня нет оснований сомневаться в анализе SLaks, что текущая реализация *1023* такая же.


Лично я всегда либо использую преобразование из строки в XName или оператор сложения между XNamespace и строкой, чтобы получить XName. Я не могу вспомнить, когда в последний раз я ссылался на это явно.

Доступные преобразования - одна из прекрасных вещей в LINQ to XML - игнорировать их, кажется, бессмысленно, IMO.

...