You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:49:38