相关疑难解决方法(0)

令人费解的Enumerable.Cast InvalidCastException

以下抛出一个InvalidCastException.

IEnumerable<int> list = new List<int>() { 1 };
IEnumerable<long> castedList = list.Cast<long>();
Console.WriteLine(castedList.First());
Run Code Online (Sandbox Code Playgroud)

为什么?

我正在使用Visual Studio 2008 SP1.

.net c# exception

44
推荐指数
2
解决办法
7629
查看次数

为什么Cast <double>()不能在IEnumerable <int>上工作?

可能重复:
Enumerable.Cast <T>扩展方法无法从int转换为long,为什么?
令人困惑的Enumerable.Cast InvalidCastException
将IEnumerable <T>转换/转换为IEnumerable <U>?

我正在尝试将整数数组转换为双精度数组(因此我可以将它传递给一个带有双精度数组的函数).

最明显的解决方案(对我来说,至少)是对IEnumerable使用Cast扩展函数,但是它给了我一个InvalidCastException,我不明白为什么.我的解决方法是使用Select,但我认为Cast看起来更整洁.

有人能告诉我为什么Cast方法不起作用?

希望下面的代码说明我的问题:

namespace ConsoleApplication1
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    class Program
    {
        static void Main()
        {
            var intArray = new[] { 1, 2, 3, 4 };
            PrintEnumerable(intArray, "intArray: ");

            var doubleArrayWorks = intArray.Select(x => (double)x).ToArray();
            PrintEnumerable(doubleArrayWorks, "doubleArrayWorks: ");

            // Why does this fail??
            var doubleArrayDoesntWork = intArray.Cast<double>().ToArray();
            PrintEnumerable(doubleArrayDoesntWork, "doubleArrayDoesntWork: ");

            // Pause
            Console.ReadLine();
        }

        private static void PrintEnumerable<T>(
            IEnumerable<T> toBePrinted, string msgPrefix)
        {
            Console.WriteLine(
                msgPrefix + string.Join(
                    ",", …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerable casting type-conversion

6
推荐指数
2
解决办法
5200
查看次数

为什么我会收到InvalidCastException?

我在c#中有以下代码片段

List<int> list = new List<int>() { 1, 23, 5, 3, 423, 3 };
            var query = list.Cast<double>().Select(d => d);
            try
            {
                foreach (var item in query)
                {
                    Console.WriteLine(item);

                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

            }
Run Code Online (Sandbox Code Playgroud)

它编译得很完美,但是当我执行它时,我得到了异常.

c# linq

3
推荐指数
2
解决办法
2377
查看次数

标签 统计

c# ×3

.net ×2

casting ×1

exception ×1

ienumerable ×1

linq ×1

type-conversion ×1