繁体   English   中英

C#System.IndexOutOfRangeException

[英]C# System.IndexOutOfRangeException

我在尝试解决此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] == ' '))

任何意见,将不胜感激。 谢谢。

chArray[i + 1]超出了数组的长度,你可能想要迭代到mystring.Length - 1

当您为chArray[i + 1]索引时,很可能超出了数组的大小。

举个例子来说,如果chArray有5个字符,当i4在循环,它将尝试访问chArray[5]与您的代码,这是超出范围(在该示例中的数组的范围将是0- 4)。

我不知道你对这个代码的意思是什么,但是一个修复就是将你的for限制for少一个:

for (int i = 0; i < mystring.Length - 1; i++)

在循环的最后一次迭代中, i是该集合的最大有效索引。

您尝试访问索引i + 1处的项目。 该指数不存在。

如果需要访问循环体中的“下一个”索引,则可以循环到倒数第二个有效索引。

if (... && (chArray[i + 1] == ' '))

i == myString.Length - 1 ,该行超过字符串的边界。

如果最后一个字符是''你使用chArray[i + 1]在一个越界位置索引

C#中的数组索引从0开始,并且数组的Length值从1开始计算,因此一个简单的修复方法是更改​​:

for (int i = 0; i < mystring.Length; i++)

对于:

for (int i = 0; i < mystring.Length - 1; i++)

还有像Matlab这样的其他平台,它们对从1开始计算的数组进行索引,因此,在那里你的代码可以获得成功! 干杯!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM