C#循环字符串数组错误

Bra*_*onS 0 c#

好吧我对此感到困惑,我有:一个int变量一个字符串数组和一个所有应该的语句.它非常标准的循环阵列结构.

public class Form1 : System.Windows.Forms.Form
{

    public int ticker = 0;
    public string[] pictureArray = new String[] {
            "image01.jpg",
            "image02.jpg",
            "image03.jpg",
            "image04.jpg",
            "image05.jpg",
            "image06.jpg",
            "image07.jpg",
            "image09.jpg",
            "image10.jpg",
            "image11.jpg",
            "image12.jpg",
            "image13.jpg",
            "image14.jpg",
            "image15.jpg",
            "image16.jpg",
            "image17.jpg",
            "image18.jpg",
            "image19.jpg",
            "image20.jpg",
            "image21.jpg",
            "image22.jpg"
        };
...
        if (this.ticker < 21)
        {
            this.ticker++;
        }
        else
        {
            this.ticker = 0;
        }

        MessageBox.Show(pictureArray[ticker]);
Run Code Online (Sandbox Code Playgroud)

它运行良好,直到自动收报机> 21然后它崩溃并说明IndexOutOfRange,但如果我要说改变MessageBox只是打印自动收报机它很好,我没有错误.现在我已经查看了类似的问题,但问题是我是一名PHP程序员,如果答案与我的情况有关,我不确定其中的一些.

任何帮助将不胜感激,我认为如果不是我道歉,我在这里有所有相关信息.但是一切都有效,直到它开始回收数组并再次运行数组.我只是感到困惑.

Jon*_*eet 12

你错过了image08.jpg,这意味着你的数组中只有21个条目,而不是22.因此当ticker21为21时,你会得到一个例外.

使其更加健壮的一种方法是使用:

if (ticker < pictureArray.Length - 1)
{
    ticker++;
}
else
{
    ticker = 0;
}
Run Code Online (Sandbox Code Playgroud)

或者有条件的:

ticker = ticker < pictureArray.Length - 1 ? ticker : 0;
Run Code Online (Sandbox Code Playgroud)

或者理查德的"无条件增量,条件重置".

或者可能有点简单:

ticker = (ticker + 1) % pictureArray.Length;
Run Code Online (Sandbox Code Playgroud)

不可否认,在这种情况下会导致您错过我怀疑的真正问题 - 您没有得到您期望拥有的所有图像.