指数超出范围。必须是非负的且小于集合的大小??

时间:2012-05-07 01:38:40

标签: c# indexing nunit

我正在做这个简单的,我得到这个错误。当我将TRUE更改为FALSE时它不会给出错误,但测试真正的错误...但我需要测试通过,我不明白..任何人都可以帮忙吗? C#visual studio 2010 NUnit

[Test]

public void prueba1()
{

    List<int> lista1 = new List<int>();

    lista1.Add(1);

    lista1.Add(2);

    lista1.Add(3);

    for (int i = 0; i < lista1.Count; i++)
    {

        Console.WriteLine(lista1[i]);
        Assert.True(lista1[i]<lista1[i+1]);

    }

3 个答案:

答案 0 :(得分:3)

列表中的有效索引是0到2. lista1.Count将是3,因此i从0变为2.当i为2时,您尝试访问{{ 1}},超出范围。

答案 1 :(得分:2)

您的清单是[1,2,3]

在每次迭代中,正在检查以下语句 1&lt; 2
2&lt; 3
3&lt; ?

在Assert.True和Assert.False中,如果检查的条件与函数调用不同,则抛出AssertFailedException错误。(Assert.True需要为True)

Assert.True(1 <2)有效,
Assert.True(2 <3)有效, Assert.True(3&lt;?) - 将发生Out of Bounds异常。

Assert.False(1&lt; 2) - 将发生AssertFailedException。

答案 2 :(得分:0)

i+1是错误的地方。更改。为什么?

你的索引应该从0开始直到2,但是错误出现在最后一个索引中,因为它试图搜索i + 1索引,这意味着它正在搜索lista1[3],因为索引开始不存在从0到1,比收集的长度少1。