枚举器.当前为空,但集合有数据.我做错了什么?

本文关键字:数据 错了 什么 集合 枚举 | 更新日期: 2023-09-27 18:15:25

我有一个字典,我调用。getenumerator ();然后赋值给一个变量。然后,我使用新分配的变量来访问我的字典并更改其值。然而,它是空的,并给我一个NullException消息。参见下面的代码:

这是我的字典是如何创建的

public Dictionary<Tuple<int, int>, string> GenerateTable(int _x, int _y)
{
    int total = _x * _y;
    var grid = new Dictionary<Tuple<int, int>, string>(); //!Might need this later!
    for (int i = 1; i <= _x; i++) // outer loop is column 
    {
        for (int ii = 1; ii <= _y; ii++) // Inner loop is row -
        {
            grid.Add(Tuple.Create(i, ii), "O");
        }
    }
    return grid; // Should have same amount of elements as int total
}

这是我调用。getenumerator

的代码
 public void ClearTable(Dictionary<Tuple<int, int>, string> _table)
        {
            var e = _table.GetEnumerator();
            _table[e.Current.Key] = "O";
        }

我在这里得到一个空引用

_table[e.Current.Key] = "O";

我确信这段代码以前工作,但也许我改变了它。有人有什么想法吗?

枚举器.当前为空,但集合有数据.我做错了什么?

枚举数在可枚举对象的第一个元素之前 1开始。您需要先呼叫MoveNext,才能访问Current

  • 如果MoveNext返回true,则该枚举对象不为空,并且该枚举对象现在指向第一个元素。

  • 如果MoveNext返回false,则可枚举对象为空,不能访问Current

<标题> 例子
IEnumerator<int> e = Enumerable.Range(4, 2).GetEnumerator();
// You may not access Current here! Enumerator is one before first element.
e.MoveNext(); //returns true
e.Current;    //returns 4
e.MoveNext(); //returns true
e.Current;    //returns 5
e.MoveNext(); //returns false
// You may not access Current here! Enumerator is one after last element.