查找下一个/上一个项目并设置为当前项目

本文关键字:项目 设置 上一个 查找 下一个 | 更新日期: 2023-09-27 17:55:25

All,

我有一个绑定到某些东西的列表。

假设我的当前索引为 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 做到这一点,但我正在努力找到它。 有什么想法吗?

谢谢。

查找下一个/上一个项目并设置为当前项目

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;
}