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