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