提问人:CryptoJones 提问时间:12/27/2020 最后编辑:xanatosCryptoJones 更新时间:12/27/2020 访问量:132
列表<字符串>。Clear() vs List<string> = 新的 List<string> 在 C# 中(可能是 ByReference 问题?[复制]
List<string>.Clear() vs List<string> = new List<string> in C# (possible ByReference issue?) [duplicate]
问:
当我在做 AoC 第六天挑战时,我注意到我的程序中有一个错误。
在下面的代码中,当使用 .在循环结束时,我有 486 个 last 值的副本。我找到了一个修复程序(hack?),但我想知道为什么在我的 .完整的程序可以在这里找到。List<string>
Clear()
List<String>
.Clear()
List<String>
int result = 0;
List<List<string>> groups = new List<List<string>>();
List<string> buffer = new List<string>();
buffer.Clear();
foreach (string s in lineList)
{
if (!string.IsNullOrEmpty(s))
{
buffer.Add(s);
}
else
{
groups.Add(buffer);
//// old way
//// was getting 487 copies of the last group
// buffer.Clear
// new way, works but I don't understand why
// byref vs byval issue?
buffer = new List<string>();
}
}
答:
2赞
Joel Coehoorn
12/27/2020
#1
Clear()
不会创建新实例,也不会创建副本。Add()
因此,只有 ,该块在每次迭代时都会添加对同一 List 实例的引用,该实例也被清空。buffer.Clear()
else
groups
评论
groups.Add(buffer.ToList()); buffer.Clear()
List
groups
buffer.Clear();
buffer