gpt4 book ai didi

c# - 当我修改一个单独的变量时,为什么这个 List 会更新?

转载 作者:行者123 更新时间:2023-11-30 20:18:59 24 4
gpt4 key购买 nike

所以我目前正在编写一个函数来从文本文件文件夹中加载一些数据。

public void loadPatterns()
{
string[] files = Directory.GetFiles("patterns/");
Level pattern = new Level();
List<char> row = new List<char>();
List<List<char>> grid = new List<List<char>>();

for(int i = 0; i < files.Length; i++)
{
var lines = File.ReadLines(files[i]);
foreach(string line in lines)
{
foreach(char c in line)
{
row.Add(c);
}
grid.Add(row);
row.Clear();
}
pattern.grid = grid;
patterns.Add(pattern);
grid.Clear();
}
}

但是目前,一旦 foreach(string line in lines) 循环结束,网格中有许多行完全为空。通过调试器查看后,似乎即使在将单行添加到网格后,row.Clear() 方法也会清除已添加到列表中的数据以及清除局部变量“行”中的数据。

为什么会这样?

我主要是一名 C++ 程序员,对于更熟悉 C# 的人来说,如果我错过了一些非常明显的东西,我深表歉意。

最佳答案

当您调用 grid.Add(row); 时,您并未将行的副本添加到网格中。您正在添加对该行的引用。因此,当您调用 row.Clear() 时,您正在清除存储在网格内的行。

要解决此问题,您需要为网格的每一行创建一个新行。为此,将 row 的声明移动到 foreach(string line in lines) 之后:

 foreach(string line in lines)
{
var row = new List<char>();
...

关于c# - 当我修改一个单独的变量时,为什么这个 List<T> 会更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com