Существует неявное преобразование из строки в XName
, в основном. Вот почему это тоже работает:
XName name = "element-name";
Вы можете сделать это с вашими собственными типами, если вы обеспечите соответствующее неявное преобразование - но обычно я не будет делать это. (Обратите внимание, что вы можете обеспечить преобразование либо по типу источника, либо по типу назначения; в данном случае преобразование обеспечивает тип цели (XName
), а не тип источника (string
).)
LINQ to XML делает все виды интересных вещей с перегрузками операторов и преобразований, которые обычно были бы плохой идеей, но в действительности работают очень хорошо в контексте XML. Мне особенно нравится обработка пространства имен:
XNamespace ns = "some namespace uri";
XName fullName = ns + "element-name";
Еще одна полезная странность - явные преобразования из XAttribute и XElement в различные типы; например, вы можете сделать:
XAttribute attribute = ...;
int? value = (int?) attribute;
Красота обнуляемости здесь в том, что если attribute
равно нулю, то и результат будет тоже. Это позволяет очень аккуратно обрабатывать необязательные атрибуты (и элементы).