1

ソート中のキャスト方法については?、私は以下の答えの1つを試しました。

vehicleList.OrderBy(c=>
{
    Car car = c as Car;
    if (car != null)
        return car.ModelName
    else
        return "";
}

しかし、コンパイラエラーが発生します。

メソッド'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable、System.Func)'の型引数は、使用法から推測できません。タイプ引数を明示的に指定してみてください。

これの何が問題になっていますか?修正する方法は?

私が達成しようとしていることは次のとおりです。

  • オブジェクトのタイプがCarの場合は、ModelNameで並べ替えます
  • それ以外の場合、TrainタイプのオブジェクトIDの場合は、TrainNameによる。
4

4 に答える 4

6

これはエラーを解決します:

var sortedVehicles = vehicleList.OrderBy<Vehicle, string>(c=>
    {
        ...
    });
于 2013-02-19T07:13:05.860 に答える
3

次のように比較子を実装できます。

var sorted = uiItems.OrderBy(x => x.Contact, new YourComparer ());

public class YourComparer : IComparer<Contact>
{
    public int Compare(Contact? x, Contact? y)
    {
        if (x == y)
            return 0;
        if (x == null)
            return 1;
        if (y == null)
            return -1;
        if (x.Presence == null)
            return 1;
        if (y.Presence == null)
            return -1;

        return return x.Presence < y.Presence ? -1 : 1;
    }
}
于 2013-02-19T07:11:51.287 に答える
0

Linq を使用するために、参照した質問の提案を試しましたCastか?

var sorted = uiItems.Cast<Contact>()
                    .OrderBy(c => contact.Presence; );
于 2013-02-19T07:07:45.973 に答える
0

以下の例を見てください。

class Item
{
    public int X;
    public string Y;
}

var items = new Item[100];
var ordered = items.OrderBy<Item, string>(i => i.Y);

OrderBy2種類必要です。前者は列挙可能で、後者はラムダ式で使用されます。さらに、場合によっては、使用されているコレクションの要素をキャストする必要があります。すべての型が特定の型であることが確実な場合、または他の型を省略するために、Castメソッドの前に使用できます。OrderByOfType

于 2013-02-19T07:17:08.847 に答える