簡體   English   中英

如何使用ac#擴展方法添加到列表以及創建列表

[英]How to use a c# extension method to add to list as well as create the list

當我使用以下方法時,當此列表為null時,將創建該列表並添加一條記錄,但是該方法之外的列表仍為null。

但是,如果已經創建了列表,那么我會看到列表超出了該方法。

    public static void Add(this List<Setting> Settings, object Name, object Value)
    {
        if(null==Settings)
        {
            Settings = new List<Setting>();
        }

        var item = Settings.FirstOrDefault(s => s.Name.ToLower() == Name.ToString().ToLower());
        if (null != item)
        {
            //overwrite the value of an existing item
            item.Value = Value.ToString();
        }
        else
        {
            //Add the new Setting to the list
            Settings.Add(new Setting(Name.ToString(), Value.ToString()));
        }
    }

這是將參數傳遞給C#中的方法的方式。 Settings是您在其上調用擴展方法的引用的副本 它指向同一個對象,但是引用不同。 因此,如果您為其分配新值,則外部參照將保持不變。

您可以考慮將返回類型從void更改為List<Settings>

然后,您可以使用:

settings = settings.Add(name, value);

附加好處是可以Add鏈:

settings = settings.Add(name1, value1)
                   .Add(name2, value2)
                   .Add(name3, value3);

擴展方法不是解決方法。 重新分配對象引用絕不應成為對象本身的職責。 這應該是對象的調用者/消費者的責任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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