Earmon, ты прав.
Быстрое посещение с помощью Отражатель * показывает, что XElement
и друзья попытаются привести значение ко всем «простым» типам, а затем вызвать соответствующий XmlConvert.ToString()
способ.
Вот (слегка отредактированная) выдержка, для иллюстрации:
if (value is string)
{
str = (string) value;
}
else if (value is double)
{
str = XmlConvert.ToString((double) value);
}
// ...
Если объект не является «простым» типом, тогда будет использоваться obj.ToString ().
Это очень хорошо, потому что это почти единственный правильный способ сделать это.
Конечно, вы обычно хотите взять с собой хоть кусочек соли, основанный на том, что "это так и есть сегодня". Действительно, MS может однажды изменить то, как они это делают. Нам все равно - важно то, что семантика высечена в камне.
* (ссылки на товары всегда предоставляются для удобства. У меня нет никаких отношений с продуктом или его производителем, кроме как для косвенного покупателя.)
Обновление:
В Представляя Microsoft LINQ , Пиалорси и Руссо подтверждают это для другой стороны уравнения (извлечение значений и приведение их), на странице 172:
[при приведении XElement к заданному типу, например, десятичному] ... различные перегрузки Явные [cast] для внутреннего использования XmlConvert из System.Xml или Анализ методов типов .NET.