Есть ли разница между el.Attribute ("...") и el.Attribute (XName.Get ("..."))?

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

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

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

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

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

2 ответа

Решение

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

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

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

Неявная ли строка XName преобразование сделать так же, как XName.Get ?

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


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

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

Там нет никакой разницы вообще.
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;
}
Другие вопросы по тегам