从列表中获取元素的索引

时间:2012-11-04 19:24:23

标签: c#

假设我有一个名为TheListOfMyObjects的对象列表。在该列表中,有一个对象具有与值匹配的属性:MyObject.TheProperty = SomeValue

如何从此列表中获取前3个对象和后3个对象?

请注意,如果匹配SomeValue的对象位于第一个位置,那么我需要位置2-5中的3个对象和最后3个位置中的3个对象,总共需要6个对象。

感谢您的建议。

2 个答案:

答案 0 :(得分:3)

试试这个:

var theObj = TheListOfMyObjects.First(x => x.TheProperty == someValue);
var index = TheListOfMyObjects.IndexOf(theObj);
//and from there it's obvious.

如果列表有可能不包含这样的元素,请使用FirstOrDefault并在theObj上检查null。

答案 1 :(得分:1)

对于迟到的回答,我很抱歉,我的电脑出了问题。您不必添加其他列表,如果列表中至少有7个对象,则可以使用类似的方法解决边缘情况:

            MyObject mo = list.FirstOrDefault(x => x.TheProperty.Equals(SomeValue));
            if(mo != null)
            {
                int index = list.IndexOf(mo);
                MyObject moMinus3 = list[(index - 3 + list.Count) % list.Count];
                MyObject moMinus2 = list[(index - 2 + list.Count) % list.Count];
                MyObject moMinus1 = list[(index - 1 + list.Count) % list.Count];
                MyObject mo0 = list[index];
                MyObject moPlus1 = list[(index + 1 + list.Count) % list.Count];
                MyObject moPlus2 = list[(index + 2 + list.Count) % list.Count];
                MyObject moPlus3 = list[(index + 3 + list.Count) % list.Count];
            }