问题是我试图将一个对象放在列表的前面,但碰巧我根本没有将该对象添加到列表中。我的代码如下所示:
List<string> names = GetNames();
string defaultName = "default";
if (!names.Contains(defaultName))
names.Prepend(defaultName);
有趣的是,当我调试代码时,执行了Prepend()指令,但没有任何 react 。因此,我必须使用List.Insert()来完成任务,但是我不明白这里发生了什么?
我的名字列表只是一个包含4个名字的简单列表,没什么特别的,如果有帮助的话,我正在使用Visual Studio 2017和.Net Framework 4.7。
最佳答案
就像伙计们在评论中提到的那样,Prepend
不会修改源代码,并且同样适用于 Enumerable
类中的所有扩展方法。
Also, mentioned in the docs:
解决方案是存储从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/