为了账号安全,请及时绑定邮箱和手机立即绑定

使用 foreach 循环复制数组时出现异常

使用 foreach 循环复制数组时出现异常

C#
慕桂英4014372 2022-07-10 10:13:38
有人能告诉我为什么我在使用 foreach 循环时看到下面的异常吗?未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。但如果我使用 for 循环,我看不到这个异常。我注意到的一件事是,1如果我使用 foreach 循环,则索引开始于。int[] array1 = new int[] { 1, 2, 3 };int[] array2 = new int[] { 4, 5, 6 };int[] mergedarray = new int[array1.Length+array2.Length];array1.CopyTo(mergedarray, 0);array2.CopyTo(mergedarray, array1.Length);Console.WriteLine(mergedarray.Length);//for (int i = 0; i < mergedarray.Length; i++)//{//    Console.WriteLine(mergedarray[i]); ;//}foreach (var item in mergedarray){    Console.Write(mergedarray[item] + " ");}
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

问题在于以下行


 foreach (var item in mergedarray)

 {

    Console.Write(mergedarray[item] + " ");

 }

这需要


 foreach (var item in mergedarray)

 {

     Console.Write(item + " ");

 }


查看完整回答
反对 回复 2022-07-10
?
jeck猫

TA贡献1909条经验 获得超7个赞

foreach不会给你一个索引,而是直接从数组中给你项目,你所做的只是对你有用,因为数组是int类型的。如果你使用,你只需要一个索引for。深入:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/foreach-in


您的“索引”以 1 开头,因为您的数组以该数字开头。


正确的解决方案是:


 foreach (var item in mergedarray)

 {

     Console.Write(item + " ");

 }

专业提示:您可以轻松地将数组项加入到stringusing string.Join( https://docs.microsoft.com/en-us/dotnet/api/system.string.join ) 中。它首先需要一个分隔符stringor char,在你的情况下是空格' 'or " ",然后是你的数组。


var joinedArray = string.Join(' ', mergedarray);

关于,2gjava。


查看完整回答
反对 回复 2022-07-10
  • 2 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信