Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找下一个/上一个项目并设置为当前项目_C#_Linq_Collections - Fatal编程技术网

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

C# 查找下一个/上一个项目并设置为当前项目,c#,linq,collections,C#,Linq,Collections,全部, 我有一张清单,上面有一些东西 假设我有一个I的当前索引。现在,我从列表中删除了几个项目(可能相邻,也可能不相邻)。如果我想将当前索引重置为删除后的下一项(或者如果没有下一项,则为最后一项,假设还有剩余项),那么在不进行太多枚举的情况下实现这一点的最佳方法是什么 基本上,我遇到的问题是,在执行删除并在某处引用新对象之前,我似乎需要弄清楚这一点,但如果不列举几个列表并使我的应用程序陷入困境,我似乎无法做到这一点 List<Object> MyCoolList; List<O

全部,

我有一张清单,上面有一些东西

假设我有一个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;
}
列出mycollist;
列表项目i将删除;
对象当前项;
//为简单起见,假设所有这些都已设置,并为以下代码所知
int i=mycollist.IndexOf(当前项);
对象NewCurrentItem=null;
if(mycollist.Any(a=>mycollist.IndexOf(a)>i&&!ItemsIWillBeDeleting.Any(b=>b==a)))
{
NewCurrentItem=mycollist.First(a=>mycollist.IndexOf(a)>i&&!ItemsIWillBeDeleting.Any(b=>b==a));
ItemsIWillBeDeleting.ForEach(a=>mycollist.Remove(a));
CurrentItem=NewCurrentItem;
}
else(如果mycollist.Count>mycollist.Count)
{
NewCurrentItem=myCollist.Last(a=>!ItemsIWillBeDeleting.Any(b=>b==a))
ItemsIWillBeDeleting.ForEach(a=>mycollist.Remove(a));
CurrentItem=mycollist.Last();
}
其他的
{
mycollist.Clear();//mycollist中的所有内容也都在ItemsIWillBeDeleting中
CurrentItem=null;
}
我相信有更好的方法可以用Linq做到这一点,但我正在努力找到它。有什么想法吗

谢谢。

私人ICollection\u someCollection
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;
}
public void delete和setnext(IEnumerable IEDelete) { bool boolStop=false; MyColClass NewCurrent=\u someCollection.FirstOrDefault(a=> { 如果(!boolStop)boolStop=IEDelete.Contains(a); 返回boolStop&!IEDelete.Contains(a); }); foreach(IEDelete中的MyColClass cl) { _删除(a); } CurrentMyColClass=NewCurrent???\u someCollection.LastOrDefault(); } MyColClass当前MyColClass { 得到; 设置 }
Linq和索引不是朋友。好的。我想我明白了。我只使用Enumerator和NextItem(或其他名称)。