C#存储错误值的嵌套列表
我正在努力处理c#中的嵌套列表。我正在用Excel数据填充列表。为此,我将一列中的所有数据存储在subdlist2中,然后将其添加到我的主列表termsList中。C#存储错误值的嵌套列表,c#,list,C#,List,我正在努力处理c#中的嵌套列表。我正在用Excel数据填充列表。为此,我将一列中的所有数据存储在subdlist2中,然后将其添加到我的主列表termsList中。 但是,在显示列表内容的最后,值不是来自多行的值,而是由最后一列的值替换。列表内容存储是否作为参考而不是值? 示例:我有5行,具有不同的值,第五行的值替换所有值 for (i = 0; i < num_speed; i++) { lastrow_current = GetLastUsedRow(current
但是,在显示列表内容的最后,值不是来自多行的值,而是由最后一列的值替换。列表内容存储是否作为参考而不是值?
示例:我有5行,具有不同的值,第五行的值替换所有值
for (i = 0; i < num_speed; i++)
{
lastrow_current = GetLastUsedRow(currentWorksheet, 12 + i * 11);
for (int j = 0; j < lastrow_current; j++)
{
if (currentWorksheet.Cells[j + 6, 12 + i * 11].Value != null)
{
if (j == 0)
{
sublist2.Add(currentWorksheet.Cells[j + 6, 13 + i * 11].Value.ToString());
}
else
{
sublist2.Add(currentWorksheet.Cells[j + 6, 13 + i * 11].Value.ToString());
}
}
}
termsList.Add(sublist2);
}
termsList.Add(sublist2);
foreach (var sublist3 in termsList)
{
foreach (var value in sublist3)
{
Console.Write(value);
Console.Write(' ');
}
Console.WriteLine();
}
for(i=0;i
很难从您的简短示例中说出来。请更新示例,以便包括列表的初始化
但列表确实是一个参考对象。您应该为每一行实例化一个新列表
您的代码应该如下所示:
var rows = new List<List<string>>();
for (row = 0; row < maxRow; row++)
{
var row = new List<string>();
for (column = 0; column < maxColumn; column++)
{
var value = sheet[row, column];
row.Add(value);
}
rows.Add(row);
}
然后继续使用值…源代码中有很多东西让人困惑,因此首先我尝试对其进行一点排序:
// List<List<string>> termsList = the list to fill with nested lists
// List<string> sublist2 = a list created outside the loop
// num_speed = number of columns to process
for (i = 0; i < num_speed; i++)
{
var currentColumn = 12 + i * 11; // taken from if (currentWorksheet.Cells[j + 6, 12 + i * 11]
var differentColumn = 13 + i * 11; // taken from sublist2.Add(currentWorksheet.Cells[j + 6, 13 + i * 11]
var lastRowOfCurrentColumn = GetLastUsedRow(currentWorksheet, currentColumn);
for (int j = 0; j < lastRowOfCurrentColumn; j++)
{
var currentRow = j + 6; // taken from currentWorksheet.Cells[j + 6,
var currentCell = currentWorksheet.Cells[currentRow, currentColumn];
var differentCell = currentWorksheet.Cells[currentRow, anotherColumn];
// here you are checking if the cell has a value ...
if (currentCell.Value != null)
// was if (currentWorksheet.Cells[j + 6, 12 + i * 11].Value != null)
{
if (j == 0)
{
// ... but here ...
sublist2.Add(differentCell.Value.ToString());
// was sublist2.Add(currentWorksheet.Cells[j + 6, 13 + i * 11].Value.ToString());
}
else
{
// ... and here you are adding a value from a cell
// out of a different column to the list
sublist2.Add(differentCell.Value.ToString());
// was sublist2.Add(currentWorksheet.Cells[j + 6, 13 + i * 11].Value.ToString());
}
}
}
// Here you are adding the same list to the parent list
// again and again for every row ...
termsList.Add(sublist2);
}
// ... and outside the loop you are adding that list again to the parent
termsList.Add(sublist2);
//List termsList=要用嵌套列表填充的列表
//List sublist2=在循环外部创建的列表
//num_speed=要处理的列数
对于(i=0;i
因此,除了检查一个单元格的值外,还使用来自不同单元格的值添加到列表中,您在每一行使用相同的列表
要为每一行创建单独的列表,并使用实际选中的列,您必须如下更改代码:
for (int j = 0; j < lastRowOfCurrentColumn; j++)
{
var listForRow = new List<string>();
// ...
listForRow.Add(currentCell.Value.ToString());
// ...
termsList.Add(listForRow);
}
for(int j=0;j
并删除循环外部多余的嵌套列表。您可以提供一个数据和输出的示例吗?无论如何,您永远不会为
子列表2
创建新实例,因此termsList
中的所有成员实际上都是相同的列表实例,这应该是不正确的。
for (int j = 0; j < lastRowOfCurrentColumn; j++)
{
var listForRow = new List<string>();
// ...
listForRow.Add(currentCell.Value.ToString());
// ...
termsList.Add(listForRow);
}