當我使用下面的方法時,當此列表爲空時,將創建該列表並添加一條記錄,但列表仍然爲空的方法。如何使用ac#擴展方法添加到列表以及創建列表
但是,如果列表已經創建,那麼我看到列表增長超出了方法。
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()));
}
}
這對我來說似乎是一種反模式。從https://msdn.microsoft.com/en-us/library/bb383977.aspx開始:「一般來說,我們建議您謹慎實施擴展方法,並且只在必要時才執行。只要有可能,客戶端代碼必須擴展現有類型應該通過創建一個從現有類型派生的新類型來實現。有關更多信息,請參見繼承(C#編程指南)。 – JamieSee
對我而言,真正突出的是它是一個正試圖重新分配自己的對象的擴展方法。如果你的代碼試圖將'this'設置爲別的東西,這不是一件好事。 – moarboilerplate
對於我來說,讓這個方法放在一個空引用上更直觀,因爲將某些東西添加到空白是沒有意義的。 – Setsu