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 に答える