假设我有一个名为TheListOfMyObjects
的对象列表。在该列表中,有一个对象具有与值匹配的属性:MyObject.TheProperty = SomeValue
。
如何从此列表中获取前3个对象和后3个对象?
请注意,如果匹配SomeValue
的对象位于第一个位置,那么我需要位置2-5中的3个对象和最后3个位置中的3个对象,总共需要6个对象。
感谢您的建议。
答案 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];
}