C# 如何在循环中显示元素元组int,int?

C# 如何在循环中显示元素元组int,int?,c#,winforms,c#-4.0,C#,Winforms,C# 4.0,我以元组结构存储数据: Dictionary<Tuple<int, int>, object> data = new Dictionary<Tuple<int, int>, object>(); 如何做到这一点?我认为你在这项工作中使用了错误的工具。使用二维数组会容易得多: var data = new object[range.RowCount() + 1, range.ColumnCount() + 1]; for (int i = 1;

我以元组结构存储数据:

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

如何做到这一点?

我认为你在这项工作中使用了错误的工具。使用二维数组会容易得多:

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]);
    }
}
var data=新对象[range.RowCount()+1,range.ColumnCount()+1];
对于(int i=1;i

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

第一件要考虑的事情。当您在字典中将对象用作键时,如果它不是基元或字符串对象,则需要相同的实例来检索值。或者实现equals方法来检查给定实例是否等于@George Alexandria注释的已知键。这是通过基本键和字符串键在内部实现的。 您还可以尝试循环字典中存储的密钥集

第二个错误是试图用两个键检索值。您需要传递包含i,j而不是i,j的对象实例。应如下所示:

数据[新元组(i,j)]

而不是:

数据[i,j]


您在字典中的键是
Tuple
,因此您无法通过
int
键获得值,例如as
data[i]
我有
数据
作为矩阵Excel。我需要避免第一行(标题)并获取每个字段的值。您可以使用自定义
EqualityComparer
创建
Dictionary
,并尝试访问值,如
data[new Tuple(I,j)]
这一行
data[I,j]中是否存在编译时异常?)你有充分的理由使用字典吗?看起来您最好使用二维对象数组(
object[,]
)谢谢,请告诉我如何在类中将对象声明为public?如下所示:
对象数据=新对象[,]
公共对象[,]数据。在知道大小之前,您不能初始化它。我不能这样使用,因为我有两个方法,一个是填充,另一个是显示。this
var data=new object[range.RowCount(),range.ColumnCount()以null填充对象,否则如果没有数据,我看不出这是个什么问题。无论如何,在初始化之前都不能显示数据,因此当填充数据的方法尚未调用时,返回null
 for (int i = 1; i < data.Count + 1; i++)
            {
                for (int j = 1; j < data.Count + 1; j++)
                {
                    data[i, j];
                }
            }
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]);
    }
}