Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么可以';t dotnet 1.1在ArrayList.GetRange之后被丢弃?_.net_Arrays_Casting_Arraylist_.net 1.1 - Fatal编程技术网

.net 为什么可以';t dotnet 1.1在ArrayList.GetRange之后被丢弃?

.net 为什么可以';t dotnet 1.1在ArrayList.GetRange之后被丢弃?,.net,arrays,casting,arraylist,.net-1.1,.net,Arrays,Casting,Arraylist,.net 1.1,我想从ArrayList中的值范围创建一个数组,但得到错误“源数组中至少有一个元素无法向下转换为目标数组类型” 为什么下面的失败,你会怎么做 int[] ints = new int[] { 1, 2, 3 }; ArrayList list = ArrayList.Adapter(ints); int[] mints = (int[])list.GetRange(0, 2).ToArray(typeof(int)); 如果您可以使用数组,也许只需Array.Copy: int[] i

我想从ArrayList中的值范围创建一个数组,但得到错误“源数组中至少有一个元素无法向下转换为目标数组类型”

为什么下面的失败,你会怎么做

int[] ints = new int[] { 1, 2, 3 };
ArrayList list = ArrayList.Adapter(ints);
int[] mints = (int[])list.GetRange(0, 2).ToArray(typeof(int));

如果您可以使用数组,也许只需
Array.Copy

    int[] ints = new int[] { 1, 2, 3 };
    int[] mints = new int[2];
    Array.Copy(ints, 0, mints, 0, 2);
或者,看起来您必须创建一个数组并循环/强制转换


(请注意,它在2.0上“按原样”运行良好-尽管您会使用
列表

这在DotNet 2.0中运行良好,因此我建议从比较分解的框架代码开始,看看有什么不同

在2.0中,调用ArrayList.Adapter()返回一个ArrayList.IListWrapper(它继承自ArrayList),它只包装一个IList(在您的例子中,是int[]类型的数组)。在IListRapper上调用ToArray将调用基础阵列上的IList.CopyTo


显然,这必须在1.1中以不同的方式实现,因为它在2.0中的设置方式是不会失败的。

正常情况下,这应该只起作用:

(int[])list.GetRange(0, 2).ToArray(typeof(int));
因为GetRange只返回一个新的ArrayList

您确定ArrayList只包含整数,而不包含其他内容吗

我无法在.NET 1.1中测试它,但我认为: -您的arraylist包含的元素类型与int不同。 -Adapter方法是问题的根源

另外,为什么不这样初始化ArrayList:

ArrayList l = new ArrayList ( new int[] {0, 1, 2, 3, 4, 5});

这是.NET 1.1中的一个已知错误,已在.NET 2.0中修复

GetRange的行为在此版本中被破坏。如果尝试使用GetRange返回的ArrayList包装器实例的无参数ToArray()列出返回值的内容,您将看到它包含空引用和其他不一致的值


请参阅2004年12月的帖子和BCL团队博客中的帖子。

我认为关键是,发布的代码不应该失败,而且事实上,它确实表明在不同的情况下很可能会出现无法解释的异常。请尝试使用非值类型(例如字符串),这可能是由于框中的某些问题链接已失效。即使在WebArchive中也找不到这些页面。