【发布时间】:2011-02-03 16:07:55
【问题描述】:
我想这样做:
List<ushort> uList = new List<ushort>() { 1, 2, 3 };
List<short> sList = uList.Cast<short>().ToList();
但我得到 InvalidCastException “指定的演员表无效。”
如何才能快速高效地投出上述集合?
【问题讨论】:
-
@Ani:我不会认为这是重复的,因为我知道您不能将
int转换为long(它们的大小不同),但我希望来自 @ 的演员987654326@ 到short是可能的,因为它们的大小相同。换句话说,(ushort[])(object)new short[] { 0, -1 }是完全有效的 C#。 -
@Gabe:同样的问题。
(short)((ushort)1)和(long)((int)1)一样是有效的 C#(为了清楚起见,进行了冗余转换)。问题与混合数字转换和拆箱有关。 blogs.msdn.com/b/ericlippert/archive/2009/03/19/… -
我要指出一个明显的问题,即无符号列表中包含的值大于有符号短允许的最大值。
-
@Ani:
(long)((int)1)是转换,而(short)((ushort)1)是转换。它们在 C# 中的语法相同,但第一个执行函数调用,而第二个不执行(或不必执行)。
标签: c# .net collections casting