0

私はこのクラスを持っています:

public class City
{
    public City()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Image { get; set; }
}

これが私のリストです:

List<City> list = new List<City>(){
new City{Id=1,Title="city1",Description=""},
new City{Id=2,Title="city2",Description=""},
new City{Id=3,Title="city3",Description=""},
new City{Id=4,Title="city4",Description=""}

}

LINQ を使用してリスト内で次または前に移動するにはどうすればよいですか?

4

5 に答える 5

7

あなたが望む、それはリストインデクサープロパティを使用することと論理的に同等であり、シーケンスが実装するかElementAtどうかを確認するための特定のチェックが含まれているため、実行時に Skip & Take を使用するよりもはるかに高速になる可能性があります。IListシーケンス ( a の実行に似ていますSkip(n).Take(1))

var nameList = List<string>{"Homer", "Marge", "Bart", "Lisa", "Maggie"};
IEnumerable<string> nameSequence = nameList;

secondFromList = nameList[1];
secondFromSequence = nameSequence.ElemenetAt(1);

IListだけでなく、あらゆる種類のコレクション、配列などによって実装されますList<>

于 2013-05-02T12:53:11.410 に答える
5

実際にはLINQではありませんが、次のようなものをお勧めします:

List<City> cityList;
public City Next(City current)
{
    int index = cityList.IndexOf(current);

    if (index < cityList.Count - 1)
        return cityList.ElementAt(index + 1);
    return current;
}

public City Previous(City current)
{
    int index = cityList.IndexOf(current);

    if (index >= 1)
        return cityList.ElementAt(index - 1);
    return current;
}

で始まりcityList.First()ます。

編集: LINQはこの仕事には間違いなく間違ったツールであると述べている他の人に同意する必要があります。絶対的な要件でない場合は、この問題に対して通常のインデックス作成を使用してください。実際、LINQ はソリューションを必要以上に難しくしています。

于 2013-05-02T12:59:46.857 に答える
2

あなたの質問から:

LINQ を使用してリスト内で次または前に移動するにはどうすればよいですか?

@mattytommoの(現在は削除された)回答に対するあなたのコメント

たとえば、次をクリックすると2つのボタン(次/前)があり、リストの次の項目を表示したいのですが...

LINQ は、この仕事に適したツールではありません。LINQ はコレクションに作用するように設計されており、特定の要素をすばやくフィルター処理して選択し、別のコレクションを返すことができます。特定のオブジェクトを「表示」してから次のオブジェクトに移動できるようには設計されていません。それよりもはるかに強力ですが、目的を達成するためのはるかに優れたツールと方法があります。

アイデアの 1 つは、単純に現在の位置を保存し、メソッドを呼び出してコレクション内の次の要素を返すことです。

private int currentPosition = 1;

public City SelectNextCity()
{
    currentPosition++;
    return list[currentPosition];
    // in this context `list` would be a class-level field.
}

これは非常に大雑把な例です。currentPositionこれを実際に実装する場合は、呼び出す前にコレクション内に存在することを確認するために、いくつかのインデックス チェックを追加する必要があります。

于 2013-05-02T12:57:06.377 に答える