如何在循环中显示元素Tuple int,int?

时间:2017-07-02 21:53:48

标签: c# winforms c#-4.0

我将数据存储在元组结构中:

Dictionary<Tuple<int, int>, object> data = new Dictionary<Tuple<int, int>, object>();

我填写如下数据:

for (int i = 1; i < range.RowCount() + 1; i++)
            {
                for (int j = 1; j < range.ColumnCount() + 1; j++)
                {
                    data.Add(new Tuple<int, int>(i, j), ws.Cell(i, j).Value);
                }
            }

现在我尝试显示data除第一行以外的每个字段:

 for (int i = 1; i < data.Count + 1; i++)
            {
                for (int j = 1; j < data.Count + 1; j++)
                {
                    data[i, j];
                }
            }

怎么做?

2 个答案:

答案 0 :(得分:1)

我认为你正在使用错误的工具来完成工作。使用二维数组会容易得多:

var data = new object[range.RowCount() + 1, range.ColumnCount() + 1];

for (int i = 1; i < range.RowCount() + 1; i++)
{
    for (int j = 1; j < range.ColumnCount() + 1; j++)
    {
        data[i, j] = ws.Cell(i, j).Value;
    }
}

for (int i = 1; i < data.GetLength(0) + 1; i++)
{
    for (int j = 1; j < data.GetLength(1) + 1; j++)
    {
        Console.WriteLine(data[i, j]);
    }
}

(我保留了基于1的索引,但我认为使用基于0的更直观,然后在访问数组时递减Excel索引)

答案 1 :(得分:0)

首先要考虑的事情。当您在字典中使用对象作为键时,如果它不是原始对象或字符串对象,则需要使用相同的实例来检索该值。或者实现你的equals方法来检查给定实例是否等于已知的密钥@George Alexandria评论here。这是在内部使用原始和字符串键。 您还可以尝试遍历存储在字典中的密钥集。

第二个错误的方法是尝试使用2个键检索值。您需要传递包含i,j而不是i,j的对象实例。应该是下一个:

  

data [new Tuple(i,j)];

而不是:

  

数据[i,j];