namespace HydroUI { [Serializable] public class SelectionSet { public string Name; public MapObjectType filterType = MapObjectType.全部; public string FilterString { get; set; } = ""; public TagList FilterTags { get; set; } = new TagList(); public List> rules = new List>(); public List FilterTypes = new List(); public MapViewNetWork net { get; set; } = null; public bool OnlyViewSelected { get; set; } = true; public List selectedObjects = new List(); public List CurrentSelectedObjects = new List(); public List View { get { List originList; List list; List list_result = new List(); if (!OnlyViewSelected && net != null) { originList = net.MapObjects; } else { originList = selectedObjects; } if (filterType == MapObjectType.全部) { list = originList; } else { var filteredSets = from obj in originList where obj.GetType() == filterType.GetObjType() select obj; list = filteredSets?.ToList(); } if (FilterString != null && FilterString != "") { list = list?.FindAll(o => o.ID.IndexOf(FilterString) >= 0); } if (FilterTags.Count > 0) { foreach (var tag in FilterTags) { var filteredSets = from obj in list where obj.Tags.Contains(tag) select obj; list = filteredSets?.ToList(); } } if (rules.Count > 0) { foreach (var rule in rules) { var filteredSets = from obj in list where rule(obj) select obj; list = filteredSets?.ToList(); } } CurrentSelectedObjects = list; list_result = list.Select(o => o.ID)?.ToList(); return list_result; } } } }