Есть ли разница между 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;
}