如何按特定顺序遍历集合?优先遍历List<Contact>中Selected为true的元素
优先遍历Selected为true的Contact对象
这事儿好办!你只需要在遍历前给集合做个简单排序,把Selected = true的Contact优先排到前面就行,用LINQ就能轻松实现。
直接上代码示例:
// 假设你的contacts是List<Contact>类型 var orderedContacts = contacts.OrderByDescending(c => c.Selected).ToList(); foreach (var contact in orderedContacts) { // 现在第一个遍历到的就是Selected为true的对象啦 Console.WriteLine($"当前遍历的联系人:{contact.Name}"); }
如果你不想额外创建新的List,也可以直接在foreach循环里用LINQ查询,省一步:
foreach (var contact in contacts.OrderByDescending(c => c.Selected)) { // 效果完全一样,优先遍历选中的联系人 }
为啥这么做可行?
在C#里,布尔值的排序规则是true等价于1,false等价于0。用OrderByDescending(降序排序)把Selected作为排序键,自然就会把所有Selected = true的对象排在最前面,未选中的跟在后面。而且LINQ的排序是稳定的——如果有多个选中的Contact,它们之间的相对顺序会和原集合里保持一致。
要是你需要更精细的排序逻辑,比如选中的在前,同时选中的联系人按名称字母顺序排列,还可以叠加ThenBy:
var orderedContacts = contacts .OrderByDescending(c => c.Selected) .ThenBy(c => c.Name) .ToList();
这样既保证了选中项的优先级,又能让选中的联系人按名称有序排列。
内容的提问来源于stack exchange,提问作者54566
相关产品推荐
相关产品推荐

