如何在 C# 中为每次迭代更改列表指针?
How to change list pointer for every iteration in c#?
我有一个要求,需要将 excel 行中的一些单元格值存储到列表中,然后将其添加到自定义 class 列表中。但是因为我不能使用同一个对象,因为它更新了同一个项目两次,所以我在创建 editsList
时遇到了麻烦。我最终得到 editList
与此对象指针问题具有相同的一组值。这是我目前所拥有的。
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
List<string> data = new List<string>();
foreach (Cell c in r.Elements<Cell>())
{
if (c.DataType != null && c.DataType == CellValues.SharedString)
{
int id = -1;
if (Int32.TryParse(c.InnerText, out id))
{
SharedStringItem item = GetSharedStringItemById(workbookPart, id);
if (item.Text != null)
{
cellValue = item.Text.Text;
}
else if (item.InnerText != null)
{
cellValue = item.InnerText;
}
else if (item.InnerXml != null)
{
cellValue = item.InnerXml;
}
}
data.Add(cellValue);
}
}
xMLTagInfo.FileName = data[0];
xMLTagInfo.Type = data[1];
xMLTagInfo.ParentTag = data[2];
xMLTagInfo.TagName = data[3];
xMLTagInfo.AttrName = data[4];
editsList.Add(xMLTagInfo);
}
有没有一种方法可以在不使用列表中的同一组值再次替换所有值的情况下执行此操作?我知道这是因为我重复使用了相同的对象指针。但是我找不到解决方案。
这是我的 XMLTagInfo
列表
的代码
XMLTagInfo xMLTagInfo = new XMLTagInfo();
List<XMLTagInfo> editsList = new List<XMLTagInfo>();
无论 xMLTagInfo
是什么(未显示),这个 应该 就像 每行创建一个不同的对象一样简单,例如:
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
var xMLTagInfo = new XMLTagInfo();
// NOT SHOWN: parse and populate xMLTagInfo
editsList.Add(xMLTagInfo);
}
作为旁注,由于列表 data
似乎是一个临时缓冲区,您可能可以声明 outside 并重用它,而不是创建一个新的List<string>
每行:
List<string> data = new List<string>();
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
var xMLTagInfo = new XMLTagInfo();
// NOT SHOWN: parse and populate xMLTagInfo
editsList.Add(xMLTagInfo);
data.Clear(); // reset the scratch buffer
}
我有一个要求,需要将 excel 行中的一些单元格值存储到列表中,然后将其添加到自定义 class 列表中。但是因为我不能使用同一个对象,因为它更新了同一个项目两次,所以我在创建 editsList
时遇到了麻烦。我最终得到 editList
与此对象指针问题具有相同的一组值。这是我目前所拥有的。
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
List<string> data = new List<string>();
foreach (Cell c in r.Elements<Cell>())
{
if (c.DataType != null && c.DataType == CellValues.SharedString)
{
int id = -1;
if (Int32.TryParse(c.InnerText, out id))
{
SharedStringItem item = GetSharedStringItemById(workbookPart, id);
if (item.Text != null)
{
cellValue = item.Text.Text;
}
else if (item.InnerText != null)
{
cellValue = item.InnerText;
}
else if (item.InnerXml != null)
{
cellValue = item.InnerXml;
}
}
data.Add(cellValue);
}
}
xMLTagInfo.FileName = data[0];
xMLTagInfo.Type = data[1];
xMLTagInfo.ParentTag = data[2];
xMLTagInfo.TagName = data[3];
xMLTagInfo.AttrName = data[4];
editsList.Add(xMLTagInfo);
}
有没有一种方法可以在不使用列表中的同一组值再次替换所有值的情况下执行此操作?我知道这是因为我重复使用了相同的对象指针。但是我找不到解决方案。
这是我的 XMLTagInfo
列表
XMLTagInfo xMLTagInfo = new XMLTagInfo();
List<XMLTagInfo> editsList = new List<XMLTagInfo>();
无论 xMLTagInfo
是什么(未显示),这个 应该 就像 每行创建一个不同的对象一样简单,例如:
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
var xMLTagInfo = new XMLTagInfo();
// NOT SHOWN: parse and populate xMLTagInfo
editsList.Add(xMLTagInfo);
}
作为旁注,由于列表 data
似乎是一个临时缓冲区,您可能可以声明 outside 并重用它,而不是创建一个新的List<string>
每行:
List<string> data = new List<string>();
foreach (Row r in sheetData.Elements<Row>().Skip(1))
{
var xMLTagInfo = new XMLTagInfo();
// NOT SHOWN: parse and populate xMLTagInfo
editsList.Add(xMLTagInfo);
data.Clear(); // reset the scratch buffer
}