Почему Счетный. Бросок повышает InvalidCastException?

Если я могу неявно бросить целочисленное значение к двойному, как:

int a = 4;    
double b = a;
// now b holds 4.0

Почему может я не делать этого:

int[] intNumbers = {10, 6, 1, 9};    
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();

Я добираюсь, "Указанный бросок не допустим" InvalidCastException исключение.

Выполнение противоположного (бросающий от дважды до интервала) приводит к той же ошибке.

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

39
задан Tim Schmelter 18 January 2018 в 09:30
поделиться

2 ответа

Что ж, у вас неверные ожидания от Cast , вот и все - он предназначен для обработки упаковки / распаковки, преобразования ссылок и идентификаторов, и это все. К сожалению, документация не так ясна, как могла бы быть: (

Решение состоит в использовании Select :

doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
56
ответ дан 27 November 2019 в 02:40
поделиться

В дополнение к ответу Джона, cast в основном полезен для объектов, реализующих IEnumerable, но не более того. Возьмем, к примеру, XmlNodeList. Если у вас нет возможности использовать пространство имен System.Xml.Linq, вы можете использовать Cast, чтобы написать несколько хороших LINQ-запросов к нему.

var result = xmlNodeList
    .Cast<XmlElement>()
    .Select(e=> e.GetAttribute("A") + e.GetAttribute("B"))
    .ToArray();
8
ответ дан 27 November 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: