2

以下のコードを検討してください

class Pin
{
   string Name; //can be either Numerical or AlphaNum
}

enum Place
{
    Left,
    Right
}

class Map
{
   Pin pin;
   Place Place;
   Rectangle Rect;
}

のフィールドには数字または英数字のみPinName使用できるため、両方をサポートするために文字列を使用しました。

今私の質問は、List<Map>ピンの名前フィールドでこのリストを並べ替えるにはどうすればよいですか? 以下のコードを試しましたが、コンパイルできません。

map.Sort((x, y) => x.Pin.Name.CompareTo(y.Pin.Name)); 
//Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<DataModels.PinMap>
4

3 に答える 3

9

あなたが示したコードは、そのコンパイラ エラーを生成しません。結果を新しい変数またはそれ自体に割り当てようとしていると思います。このようなもの:

map = map.Sort(...);

インプレースList<T>.Sortソートを行う場合、これは不可能または必要ありません。つまり、元のリストが変更されるため、何も返されません。したがって、割り当てを削除するだけで、コンパイラ エラーが解消されます。

インプレースソートが必要ない場合は、 とEnumerable.OrderBy組み合わせて使用​​するだけでToList、新しいリストを作成できます。

var result = map.OrderBy(x => x.pin.Name).ToList();
于 2012-08-28T11:35:42.047 に答える
1

救助へのLINQ:

var ordered = map.OrderBy(x => x.pin.Name);

もちろん、マップ内のどのピンもnull. null になる可能性がある場合は、次のようになります。

var ordered = map.Where(x => x.pin != null).OrderBy(x => x.pin.Name);
于 2012-08-28T11:36:18.203 に答える
0

Linqを使用します。

map = (from a in allAgents
      orderby a.AgentId
      select a).ToList<Map>();
于 2012-08-28T11:41:39.770 に答える