namespace HydroUI { [Serializable] public class LinkViewModelList : List { Dictionary dict;// public LinkViewModelList() : base() { this.dict = new Dictionary(); } public List ViewLinks { get { var list = new List(); base.ForEach(l => { //if (l is LinkViewModel) list.Add((LinkViewModel)l); }); return list; //return base.Select(l => (LinkViewModel)l)?.ToList(); } } /// 实现Add方法,同时更新字典 public void Add(LinkViewModel linkCalcModel) { base.Add(linkCalcModel); if (!dict.ContainsKey(linkCalcModel.ID)) dict.Add(linkCalcModel.ID, linkCalcModel); } /// 实现AddRange方法,同时更新字典 /// public void AddRange(List linkCalcModels) { base.AddRange(linkCalcModels); linkCalcModels.ForEach(link => { if (!dict.ContainsKey(link.ID)) dict.Add(link.ID, link); }); } public LinkViewModel this[string ID] { get { if (dict.ContainsKey(ID)) return dict[ID]; else return (LinkViewModel)base.Find(l => l.ID == ID); } } public LinkViewModel this[int index] { get { return (LinkViewModel)base[index]; } } public void Sort() { base.Sort(); } public void Sort(Comparison comparison) { base.Sort(comparison); } public void Select(Action action) { ViewLinks.ForEach(action); } //实现Find方法 public LinkViewModel Find(Predicate match) { //base.Find(match); return ViewLinks.Find(match); } //实现FindAll方法 public List FindAll(Predicate match) { return ViewLinks.FindAll(match); } //实现ForEach方法 public void ForEach(Action action) { ViewLinks.ForEach(action); } //实现RemoveAll方法 public int RemoveAll(Predicate match) { return base.RemoveAll(match); } /// 实现Remove方法,同时更新字典 public bool Remove(LinkViewModel linkCalcModel) { if (base.Remove(linkCalcModel)) { if (dict.ContainsKey(linkCalcModel.ID)) dict.Remove(linkCalcModel.ID); return true; } else return false; } } }