相关疑难解决方法(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 <T>将int []转换为double []?

可能重复:
IEnumerable.Cast <>

可以隐式地将int转换为double.为什么"指定演员表无效".异常在这里提出?

 double[] a = Enumerable.Range(0, 7).Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几个"版本".

PS我知道可能的解决方案,如:

 double[] a = Enumerable.Range(0, 7).Select(x => (double)x).ToArray();
Run Code Online (Sandbox Code Playgroud)

但我很好奇Cast如何工作=>为什么它在这个看起来如此明显的例子中不起作用.

.net c# linq ienumerable

5
推荐指数
1
解决办法
966
查看次数

为什么char [].Cast <int>会引发一个强制转换异常?

这是代码.这很简单.

  var text = "abcdef";
  var c1 = text.Cast<int>().ToArray(); // either this one
  var c2 = text.ToCharArray().Cast<int>().ToArray(); // or this one
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下都会引发无效的强制转换异常.为什么?

对于奖励分数,如果不是这样的话,最简单的方法是做我显然要做的事情.


所以,代码我实际上要写这个:

  var c3 = text.Select(c=>(int)c).ToArray();
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

c# linq

3
推荐指数
1
解决办法
73
查看次数

为什么无法将List <decimal>转换为List <int>?

以下代码给出了一个InvalidCast例外

int newValue = new List<decimal>() { 6m }.Cast<int>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

即使decimal可以int投入,为什么不能在列表中完成?

编辑:为了澄清这个问题,我想知道为什么等式的演员部分会引发异常.刚刚运行new List<decimal>() { 6m }.Cast<int>().ToList()也会给出一个InvalidCast例外

c# generics

0
推荐指数
1
解决办法
1318
查看次数

将 Int[] 数组向下转换为 Byte[] 数组

有没有一种简单的方法将整数数组向下转换为字节数组?
本质上,我想做以下事情(这不能按原样工作):

int[] myIntArray = new int[20];
byte[] byteArray = (byte[])myInArray;
Run Code Online (Sandbox Code Playgroud)

这样做的原因是在我的应用程序中 myIntArray 实际上是一个 byte[],但被声明为 int[]。这意味着只有 myIntArray 中的最低有效字节是有意义的。

c# arrays data-conversion

0
推荐指数
1
解决办法
976
查看次数

标签 统计

c# ×5

.net ×2

linq ×2

arrays ×1

data-conversion ×1

exception ×1

generics ×1

ienumerable ×1