[英]Why Linq Prepend() does not work with List<T>?
問題是我試圖將對象放在列表的前面,但碰巧我根本沒有將該對象添加到列表中。 我的代碼如下所示:
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
類中的所有擴展方法。
此方法不修改集合的元素。 而是使用新元素創建集合的副本。
解決方案是存儲從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
來完全消除混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.