Подтвердить что ты не робот

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) приводит к той же ошибке.

Что я делаю неправильно?

4b9b3361

Ответ 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();