假设我有一个名为TheListOfMyObjects
. 在该列表中,有一个具有与值匹配的属性的对象:MyObject.TheProperty = SomeValue
。
如何从此列表中获取前 3 个对象和后 3 个对象?
请注意,如果匹配的对象SomeValue
位于第一个位置,那么我需要位置 2-5 的 3 个对象和最后 3 个位置的 3 个对象,总共 6 个对象。
感谢您的建议。
假设我有一个名为TheListOfMyObjects
. 在该列表中,有一个具有与值匹配的属性的对象:MyObject.TheProperty = SomeValue
。
如何从此列表中获取前 3 个对象和后 3 个对象?
请注意,如果匹配的对象SomeValue
位于第一个位置,那么我需要位置 2-5 的 3 个对象和最后 3 个位置的 3 个对象,总共 6 个对象。
感谢您的建议。
试试这个:
var theObj = TheListOfMyObjects.First(x => x.TheProperty == someValue);
var index = TheListOfMyObjects.IndexOf(theObj);
//and from there it's obvious.
如果列表有可能不包含这样的元素,请使用 FirstOrDefault 并检查 theObj 上的 null。
抱歉回复晚了,电脑有问题。您不必添加另一个列表,如果您的列表中至少有 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];
}