以下抛出一个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.
可能重复:
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如何工作=>为什么它在这个看起来如此明显的例子中不起作用.
这是代码.这很简单.
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)
哪个工作正常.
以下代码给出了一个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例外
有没有一种简单的方法将整数数组向下转换为字节数组?
本质上,我想做以下事情(这不能按原样工作):
int[] myIntArray = new int[20];
byte[] byteArray = (byte[])myInArray;
Run Code Online (Sandbox Code Playgroud)
这样做的原因是在我的应用程序中 myIntArray 实际上是一个 byte[],但被声明为 int[]。这意味着只有 myIntArray 中的最低有效字节是有意义的。