所有
我有一个绑定某事的List。
假设我有i的当前指数。现在,我从列表中删除了几个项目(可能是也可能不是彼此相邻)。如果我想将当前索引重置为删除后的下一个项目(或者如果没有下一个项目,那么最后一个项目,假设还有任何项目)那么什么是最好的方法来实现这一目标很多枚举。
基本上,我坚持的是,似乎我需要在执行删除之前解决这个问题,并在某处引用新对象,但我似乎无法通过几个列表进行枚举并使我的应用程序陷入困境
List<Object> MyCoolList;
List<Object> ItemsIWillBeDeleting;
Object CurrentItem;
//For simplicity, assume all of these are set and known for the following code
int i = MyCoolList.IndexOf(CurrentItem);
Object NewCurrentItem = null;
if (MyCoolList.Any(a => MyCoolList.IndexOf(a) > i && !ItemsIWillBeDeleting.Any(b => b==a)))
{
NewCurrentItem = MyCoolList.First(a => MyCoolList.IndexOf(a) > i && !ItemsIWillBeDeleting.Any(b => b==a));
ItemsIWillBeDeleting.ForEach(a => MyCoolList.Remove(a));
CurrentItem = NewCurrentItem;
}
else (if MyCoolList.Count > MyCoolList.Count)
{
NewCurrentItem = MyCoolList.Last(a => !ItemsIWillBeDeleting.Any(b => b==a))
ItemsIWillBeDeleting.ForEach(a => MyCoolList.Remove(a));
CurrentItem = MyCoolList.Last();
}
else
{
MyCoolList.Clear(); //Everything is in MyCoolList is also in ItemsIWillBeDeleting
CurrentItem = null;
}
我确信有更好的方法可以用Linq做到这一点,但我很难找到它。有什么想法吗?
感谢。
答案 0 :(得分:0)
private ICollection<MyCoolClass> _someCollection
public void DeleteAndSetNext(IEnumerable<MyCoolClass> IEDelete)
{
bool boolStop = false;
MyCoolClass NewCurrent = _someCollection.FirstOrDefault(a =>
{
if (!boolStop) boolStop = IEDelete.Contains(a);
return boolStop && !IEDelete.Contains(a);
});
foreach (MyCoolClass cl in IEDelete)
{
_someCollection.Remove(a);
}
CurrentMyCoolClass = NewCurrent ?? _someCollection.LastOrDefault();
}
MyCoolClass CurrentMyCoolClass
{
get;
set;
}