IEnumerable.Cast <>
Если я могу неявно использовать целочисленное значение для double, например:
int a = 4;
double b = a;
// now b holds 4.0
Почему я не могу этого сделать:
int[] intNumbers = {10, 6, 1, 9};
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();
Я получаю исключение "Указанный приведение недействителен" InvalidCastException
.
Выполнение противоположного (отбрасывание от double до int) приводит к той же ошибке.
Что я делаю неправильно?
Ответы
Ответ 1
Ну, у вас неправильные ожидания Cast
, что все - это означало иметь дело с бокс /unboxing, ссылкой и конверсией идентичности, и все. К сожалению, документация не так ясна, как может быть: (
Решение состоит в использовании Select
:
doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
Ответ 2
Чтобы добавить к Jon answer cast, в основном полезно для объектов, которые реализуют IEnumerable
, но ничего больше. Например, XmlNodeList. Если у вас нет роскоши использования пространства имен System.Xml.Linq
, вы можете использовать Cast<XmlElement>
для написания каких-то хороших запросов LINQ против него.
var result = xmlNodeList
.Cast<XmlElement>()
.Select(e=> e.GetAttribute("A") + e.GetAttribute("B"))
.ToArray();