当列表索引是变量时抛出异常

时间:2014-08-04 13:58:11

标签: c# list exception

我有包含自定义类元素的列表。我想将一个元素的属性赋给变量。

以下代码有效:

string myVar = list[0].MyType.MyStringProperty;

但是我想为列表的其余部分重复这个过程,所以我打算使用循环。 但是,此代码不起作用,因为它抛出了ArgumentOutOfRange异常:

for(int i=0; i<=list.Count; i++)
    {
        myVar = list[i].MyType.MyStringProperty;
    }

如何解决此问题?

编辑: 在第一次执行循环时抛出异常,在最后一行。在调试期间,列表中的元素似乎没问题。它们都具有必需的字符串类型属性,其值为null(除null之外)。有可能,它与行有关,但是我使用这个完全相同的方法在其他地方的代码中添加新行,并且它完全正常(但这些数据不是从列表中获取的)。

    private void MyMethod(List<MyType> list)
    {
        for (int i = 1; i < list.Count; i++)
        {
            DataRow newrow = datatable.NewRow();
            newrow["Column"] = list[i].MyStringProperty;
        }
    }

1 个答案:

答案 0 :(得分:5)

您的代码中有Off-by-one error

更改

for(int i=0; i <= list.Count; i++)// <=

 for(int i=0; i < list.Count; i++)// Note <= is changed to <

您的条件为i<=list.Count,这意味着当i等于list.Count时,for循环将执行,在这种情况下,您将获得异常,因为List<T>为零