今天在論壇上看到一問題,是這樣描述的:
我有個student.cs 模型
-
class student{public string Sname{get;set;}public int Money{get;set;}}
已有的集合
-
IList<student> list = new List<student>(); student s1 = new student {Sname = "周星馳" ,60}; student s2 = new student {Sname = "劉德華" ,80};
--------------------------------------------------------
我的意圖如下
當我再往list添加一個人的時候,比如添加{"吳孟達",50}的時候集合正常添加
但當我再添加周星馳{"周星馳",10}的時候,因為list已經有周星馳了,所以最後的結果變成{"周星馳",70}
總的來說就是遇到同一個人的時候,就把money相加,而集合的數量不變。
讓我想到可以使用C# 擴充方法來實現
現將代碼記錄在此 方便以後查看
static class Extensions<br /> {<br /> internal static void AddStudent(this List<student> list, student item)<br /> {<br /> student temp = list.SingleOrDefault(s => s.Sname == item.Sname);<br /> if (temp == null) list.Add(item);<br /> else temp.Money += item.Money;<br /> }<br /> }<br /> class student<br /> {<br /> public string Sname { get; set; }<br /> public int Money { get; set; }<br /> }<br /> public partial class CSSTest : System.Web.UI.Page<br /> {<br /> protected void Page_Load(object sender, EventArgs e)<br /> {<br /> var list = new List<student>();<br /> list.AddStudent(new student { Sname = "周星馳", Money = 60 });<br /> list.AddStudent(new student { Sname = "劉德華", Money = 80 });<br /> list.AddStudent(new student { Sname = "周星馳", Money = 10 });<br /> list.ForEach(l => Response.Write(l.Sname+" "+l.Money));<br /> /*<br /> * 結果:<br /> * 周星馳 70<br /> * 劉德華 80<br /> */<br /> }<br /> }
使用擴充方法
個人感覺方便在於VS智能感知同樣能感知到
且注意此擴充方法的小表徵圖 和別的不一樣
MSDN參考: http://msdn.microsoft.com/zh-cn/library/vstudio/bb383977.aspx