gpt4 book ai didi

c# - 为什么 Linq Prepend() 不适用于 List

转载 作者:行者123 更新时间:2023-11-30 15:14:42 26 4
gpt4 key购买 nike

问题是我试图将一个对象添加到列表中,但我碰巧这个对象根本没有添加到列表中。我的代码如下所示:

List<string> names = GetNames();
string defaultName = "default";
if (!names.Contains(defaultName))
names.Prepend(defaultName);

有趣的是,当我调试代码时,执行了 Prepend() 指令,但没有任何反应。因此,我必须使用 List.Insert() 来完成任务,但我不明白这里发生了什么?

我的名单只是一个包含 4 个名字的简单列表,没什么特别的,如果有帮助的话,我使用的是 Visual Studio 2017 和 .Net Framework 4.7。

最佳答案

正如评论下的人所提到的,Prepend 不会修改源代码并且同样适用于 Enumerable 中的所有扩展方法。类。

Also, mentioned in the docs :

This method does not modify the elements of the collection. Instead, it creates a copy of the collection with the new element.

解决方案是存储从 Prepend 返回的值而不是丢弃它。

此外,如果您想找到一个实际修改源的方法,请使用 Insert 否则您也可以创建自己的 Prepend 扩展方法:

static class Extentions
{
public static void Prepend<T>(this List<T> source, T element) => source.Insert(0, element);
}

您使用此方法的方式与您当前使用 Enumerable.Prepend 的方式完全相同,但是您必须确保您的代码实际调用此版本的 Prepend而不是 Enumerable 类中的那个。

如果认为合适,您只需将 Prepend 重命名为 PrependToList 即可完全消除混淆。

关于c# - 为什么 Linq Prepend() 不适用于 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921210/

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