我将数据存储在元组结构中:
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];
}
}
怎么做?
答案 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];