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处获取元素.
有更好的想法吗?
我会使用枚举器来迭代集合 - 这就是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
| 归档时间: |
|
| 查看次数: |
4121 次 |
| 最近记录: |