C#中的list add可行但append不行?

8

我正在使用 C# System.Collections.Generic List,Add 函数能够正常使用,但是 Append 却没有任何效果,为什么会这样?我感觉我可能漏看了一些明显的问题,但是我无法确定,我使用它的方式与 Add 一样,但是它却没有效果。

List<string> x = new List<string>();
x.Add("hello");
foreach (string s in x) { Console.WriteLine(s); }
Console.WriteLine();
x.Add("hi");
foreach (string s in x) { Console.WriteLine(s); }
Console.WriteLine();
x.Append("oi");
foreach (string s in x) { Console.WriteLine(s); }
Console.WriteLine();
x.Append("aye");
foreach (string s in x) { Console.WriteLine(s); }
Console.WriteLine();

输出:

hello

hello
hi

hello
hi

hello
hi

2
在网上搜索“c# SomeMethodName”通常会将您带到未按预期工作的方法的文档。在那里,您可以阅读有关如何使用它的信息。 - Rufus L
1个回答

15
Append返回更新后的集合,而不是修改原始集合。

正确的用法应该是像这样:var y = x.Append("foo")。请注意,您不能将Append的结果存回到x中,因为它返回一个IEnumerable<string>类型的引用,而不是List<string>

一般来说,我会坚持使用List<string>.Add(string),除非您实际上要处理一个IEnumerable<T>对象。


有没有办法在列表的开头添加元素,还是我必须添加一个空元素到列表中,然后将所有元素向右移动并将新元素放置在末尾?顺便说一句,非常感谢您的帮助。 - mizuprogrammer
1
您可以使用 List<T>.Insert() 方法在列表中的任何位置进行插入。要在开头插入,请使用索引 0,例如:x.Insert(0, "greetings"); - Rufus L
1
@mizuprogrammer 还有一个相应的 Prepend 方法,它将把项目添加到可枚举对象的开头。 - Vera
附注:“Append返回更新的集合”不完全准确 - 它返回可枚举对象,在枚举时会在源集合末尾多一个额外的项目。也就是说,var x = new List<int>{1,2,3}; var y = x.Append(4); x.Add(5); var list = y.ToList();将导致list =“1, 2, 3, 5, 4”(而不是1,2,3,4,即使在列表1,2,3上调用'Append')。 - Alexei Levenkov
非常感谢您通过这个答案拯救了我的理智,并恢复了我对S.O.的信心! 我刚刚写了一篇与OP发布的内容相似的东西,然后与一个爱说话的AI工具进行了一场激烈的辩论,它一直在告诉我应该做什么(调用Add()函数),并且说我的代码肯定无法编译。嗯... - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接