.net Trouble бросая ints делает десятичные числа

Почему делает это:

(new[]{1,2,3}).Cast<decimal>();

результат в

InvalidCastException: Указанный бросок не допустим.

6
задан Ronnie Overby 2 March 2010 в 16:17
поделиться

2 ответа

Ага, Cast этого не делает. В основном он просто ссылается на преобразования и преобразования распаковки, а не на преобразования между разными типами значений.

Используйте вместо этого:

(new[]{1,2,3}).Select(x => (decimal)x)

Обратите внимание, что до .NET 3.5 SP1, Cast выполнило несколько преобразований больше, чем сейчас. Не знаю, сработало бы тогда это или нет, но сейчас точно не работает.

11
ответ дан 8 December 2019 в 17:21
поделиться

Cast не конвертируется.

Когда вы используете метод расширения Cast, он пытается преобразовать элемент на основе схемы наследования. Поскольку int не является производным от decimal, это нельзя сделать с помощью Cast. Вместо этого попробуйте следующее:

(new[] {1,2,3}).Select(x => (decimal)X);
3
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

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