问题是我试图将一个对象放在列表的前面,但碰巧我根本没有将该对象添加到列表中。我的代码如下:
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。
答案 0 :(得分:1)
正如伙计们在评论中所述,Prepend
不会修改源代码,并且同样适用于Enumerable
类中的所有扩展方法。
此方法不会修改集合的元素。代替, 它会使用新元素创建集合的副本。
解决方案是存储从Prepend
返回的值,而不是丢弃它。
此外,如果您想找到一种可以实际修改源代码的方法,请使用Insert
,否则您也可以创建自己的Prepend
扩展方法:
static class Extentions
{
public static void Prepend<T>(this List<T> source, T element) => source.Insert(0, element);
}
您将使用与当前使用Enumerable.Prepend
完全相同的方法,但是必须确保您的代码实际调用的是此版本的Prepend
,而不是{{ 1}}类。
如果认为适当,只需将Enumerable
重命名为Prepend
,就可以完全消除混乱。