所以我有一个名为Attributes的列表填充了RoomId,介于1-25之间 无论如何使用IndexOf来调用多个值?
attributes.IndexOf(new Attributes { RoomID = 1 });
所以这样的事情会很棒
attributes.IndexOf(new Attributes { RoomID = 1-25});
答案 0 :(得分:4)
你可以简单地使用linq - 使用接受Func<TSource, Int32, TResult>
的{{3}}重载:
var indexes = attributes
.Select((a, i) => return new {Element = a, Index = i})
.Where(ei => ei.Element.RoomId >= 1 && ei.Element.RoomId <= 25)
.Select(ei => ei.Index);
这将返回IEnumerable<int>
,其中包含RoomId
值介于1和25之间的所有属性索引。
答案 1 :(得分:0)
我建议使用FindAll
这样的谓词;
假设您的列表包含称为Room
的对象,并且每个对象都有RoomId
List<Room> foundRooms = attributes.FindAll(delegate (Room obj) { return obj.RoomId >= 1 && obj.RoomId <= 25; });
答案 2 :(得分:0)
使用FindIndex(predicate)
代替IndexOf(item)
var a = new List<int>{1,2,3,4};
Console.WriteLine(a.FindIndex(item => item == 3)); // 2
Console.WriteLine(a.FindIndex(item => item == -1)); // -1