获取序列中"下一个"元素的最简单方法是什么?

RPM*_*984 3 .net c# linq icollection c#-4.0

我有一个ICollection<SomeClass>.

public class SomeClass
{
   public string Text { get; set; }
   public bool IsPreferred { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

那里的物品已经预订,所以"下一步"确实意味着什么.

在我的场景中,序列的内容如下所示:

[0] - "a",假

[1] - "b",是的

[2] - "c",假

我试图在那个之后获得"下一个"元素IsPreferred == true.所以在上面,我想得到元素2,我想清除其他IsPreferred值.

所以我想最终得到这个:

[0] - "a",假

[1] - "b",假

[2] - "c",是的

基本上将首选项目洗牌.

最好的方法是什么?我唯一能想到的是创建一个新数组,逐个添加它们,跟踪首选的索引,然后在上述索引+1处获取元素.

有更好的想法吗?

The*_*uin 5

我会使用枚举器来迭代集合 - 这就是foreach在幕后所做的事情:

var enumerator = collection.GetEnumerator();

while (enumerator.MoveNext())
{
    if (enumerator.Current.IsPreferred)
    {
        var oldPreferred = enumerator.Current;

        if (enumerator.MoveNext())
        {
            oldPreferred.IsPreferred = false;
            enumerator.Current.IsPreferred = true;
        }

        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这确实假设你想在找到带有IsPreferred的第一个项目后停止,如果这是最后一个项目,仍然清除IsPreferred.

编辑:固定边缘情况,其中IsPreferred始终在单个项目的集合上设置为false