0

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

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

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

感谢您的建议。

4

2 回答 2

3

试试这个:

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

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

于 2012-11-04T19:30:15.890 回答
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];
            }
于 2012-11-04T19:56:47.783 回答