猿问

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

有人能告诉我为什么我在使用 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] + " ");

}


慕桂英4014372
浏览 175回答 2
2回答

慕虎7371278

问题在于以下行&nbsp;foreach (var item in mergedarray)&nbsp;{&nbsp; &nbsp; Console.Write(mergedarray[item] + " ");&nbsp;}这需要&nbsp;foreach (var item in mergedarray)&nbsp;{&nbsp; &nbsp; &nbsp;Console.Write(item + " ");&nbsp;}

jeck猫

foreach不会给你一个索引,而是直接从数组中给你项目,你所做的只是对你有用,因为数组是int类型的。如果你使用,你只需要一个索引for。深入:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/foreach-in您的“索引”以 1 开头,因为您的数组以该数字开头。正确的解决方案是:&nbsp;foreach (var item in mergedarray)&nbsp;{&nbsp; &nbsp; &nbsp;Console.Write(item + " ");&nbsp;}专业提示:您可以轻松地将数组项加入到stringusing string.Join( https://docs.microsoft.com/en-us/dotnet/api/system.string.join ) 中。它首先需要一个分隔符stringor char,在你的情况下是空格' 'or " ",然后是你的数组。var joinedArray = string.Join(' ', mergedarray);关于,2gjava。
随时随地看视频慕课网APP
我要回答