簡體   English   中英

為什么Linq Prepend()無法與List一起使用 <T> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM