-6
DateTime[] start = new DateTime[] { new DateTime(1990, 1, 1), new DateTime(1995, 1, 1) };

DateTime[] end   = new DateTime[] { new DateTime(2000, 1, 1), new DateTime(2008, 1, 1) };

TimeSpan timespan;

private void button1_Click(object sender, EventArgs e)
{       

    for (int i=0; i<2; i++)
    {         

        if (end[i] < end[i + 1] && start[i] < start[i + 1] && start[i + 1] >= end[i])            
            timespan = (end[i] - start[i]) + (end[i + 1] - end[i]); 


        /* if (end[i-1] < end[i] && start[i-1] < start[i] && start[i] >= end[i-1])            
            timespan = (end[i-1] - start[i-1]) + (end[i] - end[i-1])  */
    }                 

    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
4

3 回答 3

2

您的问题是,当i = 1theni + 1超出数组范围时。

如果不知道您希望如何处理最后一个元素(当没有下一个元素时),很难提供替代方案。

于 2013-11-04T11:54:35.033 回答
0
end[i + 1]

当 i 从 0 变为 1 时,将给出 2 的索引器(即数组中的第三项)。显然,当应用于长度为 2 的数组时,这超出了范围。

于 2013-11-04T11:54:56.603 回答
0

问题看起来很简单。

当您的循环迭代达到 i=1

你的内在条件 end[i] < end[i + 1]

将检查 end[1] < end[2] (在数组索引之外)

所以改变你的循环

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

或者

for (int i=0; i<1; i++)
于 2013-11-04T11:58:26.327 回答