我在尝试解决此C#错误时遇到了一些问题:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at DayZMap.ProcessMemory.CutString(String mystring) in Z:\p\Memory.cs:line 45
at DayZMap.Map.refreshMap(Object sender, PaintEventArgs e) in Z:\p\Form1.cs:line 517
at System.Windows.Forms.Control.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Form.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
at System.Windows.Forms.Control.OnPrint(PaintEventArgs e)
at System.Windows.Forms.Control.WmPrintClient(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
它崩溃的功能是:
public string CutString(string mystring)
{
char[] chArray = mystring.ToCharArray();
string str = "";
for (int i = 0; i < mystring.Length; i++)
{
if ((chArray[i] == ' ') && (chArray[i + 1] == ' '))
{
return str;
}
if (chArray[i] == '\0')
{
return str;
}
str = str + chArray[i].ToString();
}
return mystring.TrimEnd(new char[] { '0' });
}
它会抛出异常:
if ((chArray[i] == ' ') && (chArray[i + 1] == ' '))
任何建议都将不胜感激。感谢。
答案 0 :(得分:1)
chArray[i + 1]
超出了数组的长度,您可能需要迭代到mystring.Length - 1
。
答案 1 :(得分:1)
当您为chArray[i + 1]
编制索引时,很可能超出了数组的大小。
例如,如果chArray
有5个字符,当循环中i
为4
时,它会尝试使用您的代码访问chArray[5]
,这是超出范围(该示例中数组的边界将为0-4)。
我不知道您对此代码的意图,但一个修复方法是将您的for
限制为少一个:
for (int i = 0; i < mystring.Length - 1; i++)
答案 2 :(得分:0)
在循环的最后一次迭代i
是该集合的最大有效索引。
您尝试访问索引i + 1
处的项目。该指数不存在。
如果需要访问循环体中的“next”索引,则可以循环到倒数第二个有效索引。
答案 3 :(得分:0)
if (... && (chArray[i + 1] == ' '))
当i == myString.Length - 1
时,该行超过字符串的边界。
答案 4 :(得分:0)
如果最后一个字符是''您使用chArray[i + 1]
答案 5 :(得分:0)
C#中的数组索引从0开始,数组的Length值从1开始计算,因此可以更改一个简单的修复:
for (int i = 0; i < mystring.Length; i++)
有:
for (int i = 0; i < mystring.Length - 1; i++)
还有像Matlab这样的其他平台,它们从1开始对数组进行索引,因此,在那里你的代码可以成功! 干杯!!!