C#中如何使用IndexOf匹配多个RoomID值?
解决方法:如何在Attributes列表中查找RoomID范围匹配的元素索引
嘿,我来帮你搞定这个问题!首先得明确:IndexOf方法本身是用来查找单个特定对象在列表里的首次出现位置的,它没办法直接处理“匹配一个范围值”的需求,而且你写的new Attributes { RoomID = 1-25}这种语法本身也不合法——1-25是个算术表达式,不是单个有效的RoomID值哦。
不过我们有更合适的方法来实现你想要的效果,下面给你两种常用方案:
方案1:找第一个符合范围条件的元素索引
如果你只想找列表中第一个RoomID在1到25之间的元素的索引,可以用列表的FindIndex方法,它支持自定义匹配条件:
// 查找首个RoomID处于1-25区间的元素索引 int firstMatchingIndex = attributes.FindIndex(attr => attr.RoomID >= 1 && attr.RoomID <= 25);
- 找到匹配项时,返回对应的索引值;
- 如果列表里没有符合条件的元素,会返回
-1,和IndexOf的行为保持一致。
方案2:获取所有符合范围条件的元素索引
要是你需要拿到所有RoomID在1-25范围内的元素的索引,可以结合LINQ的Select和Where方法来实现:
using System.Linq; // 记得引用LINQ命名空间 // 收集所有符合条件的元素索引 var allMatchingIndices = attributes .Select((attr, idx) => new { Attr = attr, Index = idx }) // 同时保留元素和它的索引 .Where(item => item.Attr.RoomID >= 1 && item.Attr.RoomID <= 25) // 筛选范围 .Select(item => item.Index) // 提取索引 .ToList();
这样得到的是一个包含所有匹配索引的列表,方便你后续批量处理。
另外补充一点:如果你之前用IndexOf时是依赖Attributes类的默认对象相等比较,那要注意FindIndex是完全基于你写的条件判断(这里就是RoomID的范围),不需要依赖对象的Equals重写,反而更直接贴合你的需求。
内容的提问来源于stack exchange,提问作者luddej
相关产品推荐
相关产品推荐

