C# 枚举数。当前值为null,但集合中有数据。我做错了什么

C# 枚举数。当前值为null,但集合中有数据。我做错了什么,c#,.net,dictionary,enumeration,C#,.net,Dictionary,Enumeration,我有一个字典,我正在调用.GetEnumerator();并将其赋给一个变量。然后,我使用新分配的变量访问字典并更改值。然而,它是空的,并给我一个空异常消息。见下面的代码: 我的字典就是这样创建的 public Dictionary<Tuple<int, int>, string> GenerateTable(int _x, int _y) { int total = _x * _y; var grid = new Dictionary<Tuple&

我有一个字典,我正在调用.GetEnumerator();并将其赋给一个变量。然后,我使用新分配的变量访问字典并更改值。然而,它是空的,并给我一个空异常消息。见下面的代码:

我的字典就是这样创建的

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
}
我确信这个代码以前是有效的,但也许我改变了它。有人有什么想法吗?

枚举器在枚举表的第一个元素之前开始一个。您需要先调用
MoveNext
,然后才能访问
Current

  • 如果
    MoveNext
    返回true,则可枚举项为非空,枚举数现在指向第一个元素

  • 如果
    MoveNext
    返回false,则可枚举项为空,您无法访问
    Current

例子
IEnumerator e=Enumerable.Range(4,2).GetEnumerator();
//您不能在此处访问当前文件!枚举数位于第一个元素之前。
e、 MoveNext()//返回true
e、 电流//返回4
e、 MoveNext()//返回true
e、 电流//返回5
e、 MoveNext()//返回false
//您不能在此处访问当前文件!枚举数位于最后一个元素之后。

是否可以在do/while循环中编写此代码?在字典枚举时编辑它是我的问题。我不知道实现我的代码的好方法。@nickgowdy你想做什么?
 public void ClearTable(Dictionary<Tuple<int, int>, string> _table)
        {
            var e = _table.GetEnumerator();
            _table[e.Current.Key] = "O";
        }
_table[e.Current.Key] = "O";
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.