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());
}
问问题
111 次
3 回答
2
您的问题是,当i = 1
theni + 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 回答