我有一些清单:
KeyedCollection<int, InstantiatedObjectsListType> ActiveUnitList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> ActiveBuildingList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> ActiveUIList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> ActiveManagersList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> DisabledUnitList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> DisabledBuildingList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> DisabledUIList = new InstantiatedObjectListCollection();
KeyedCollection<int, InstantiatedObjectsListType> DisabledManagersList = new InstantiatedObjectListCollection();
我想通过键或值来检查对象是否在这些列表中的任何一个。可以使用LINQ在一次操作中搜索所有8个列表,还是需要在链中使用8个单独的操作?
据我所知,我可以有多个操作一次搜索一个列表,但为了整洁,我宁愿将其压缩成单个操作。
答案 0 :(得分:3)
您可以联合这些列表并搜索结果。
ActiveUnitList
.Union(ActiveBuildingList)
.Union(ActiveUIList)
.Where(...)
答案 1 :(得分:0)
您可能还会考虑重新调整代码以删除重复并提供更快的查找速度。
看起来你有4种类型可以是Active或Disabled,所以你应该可以在4种类型上设置一个接口:
public interface IDisableable
{
bool IsActive();
}
然后你可以用一个字典来查找Id的所有内容
private Dictionary<int, IDisableable> disableableObjectsById;
然后获取活动对象是这样的:
var activeObjectsWithId = disableableObjectsById.Where(kvp => kvp.Value.IsActive());
根据您对集合的其他操作,您可以使用对象使用的其他接口以及其他类型的集合。