0

私は一連のデータでレコードからレコードへと移動する機能に取り組んできましたnext()。私が思いついたメソッドは完全に機能し、最初と最後のレコードを除いて、必要に応じて常に型を返します。最後のレコードを見ると、LINQ が最初のレコードを返し、最初のレコードを見ると、前のレコードが最後になります。レコード間の移動を無限にします。previous()IEnumerable<T>

現在、これらのメソッドがあります(プライバシーのためにタイプの名前を変更しました):-

private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
        {
            return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault();
        }

        private static Teddy _getPrevious(string code, IEnumerable<Teddy> teddies)
        {
            return teddies.TakeWhile(i => !i.Code.Equals(code.ToUpper())).LastOrDefault();
        }

私はまだLINQがTeddy型を返すことを望んでいます.そうしないと、null型を処理するのが面倒になります. 誰でも手伝ってもらえますか?

助けていただければ幸いです。

4

2 に答える 2

2
private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
{
    return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault() 
       ?? teddies.First();
}

private static Teddy _getPrevious(string code, IEnumerable<Teddy> teddies)
{
    return teddies.TakeWhile(i => !i.Code.Equals(code.ToUpper())).LastOrDefault() 
       ?? teddies.Last();
}

これを使用できます。ただし、空のテディ コレクションを渡すと、例外がスローされます。代わりに FirstOrDefault() を使用すると、スローは回避されますが、null が返されますが、これは望ましくないと述べました。

??null 合体演算子で、左側が null と評価された場合は右側の値を返します。MSDN .

于 2013-05-10T16:49:00.307 に答える
1

私はこの実装を試してみます:

private static Teddy _getNext(string code, IEnumerable<Teddy> teddies)
{
    return teddies.SkipWhile(i => !i.Code.Equals(code.ToUpper())).Skip(1).FirstOrDefault()
        ?? teddies.FirstOrDefault();
}

これが機能する方法はSkip(1)、 が入力の末尾を超えると、 がFirstOrDefault()返されることを保証しnullnull 合体演算子??が から最初のレコードを取得することteddiesです。

の実装は、 の代わりにgetPreviousを使用して、これの「ミラー イメージ」になります。LastOrDefault()FirstOrDefault()

于 2013-05-10T16:48:23.187 に答える