2

次のように、リスト内にあるオブジェクトのインスタンスでプロパティを並べ替える必要があります。

    public List<CustomClass> lCustomClasses = new List<CustomClass>();

CustomClass には、次の値のいずれかを持つことができるプロパティ MyField があります。

    1,2,3

リストをascまたはdescではなく、3,1,2で並べ替える必要があります

別のリストにコピーせずにこれを行うためのショートカットはありますか?

4

3 に答える 3

2

カスタム比較子を受け取る List.Sortのオーバーロードを使用します。このMSDN ページのコード サンプルを参照してください。

于 2013-03-01T01:40:21.293 に答える
1

奇妙な要件。:)
とにかく、他の人があなた自身を書くことができると示唆しているように、1、2、3のみをサポートすると仮定しますIComparer<T>。例えば

class Program
{
    static void Main(string[] args)
    {
        List<CustomClass> list = new List<CustomClass>() 
        {
            new CustomClass(){MyField = 3},
            new CustomClass(){MyField = 2},
            new CustomClass(){MyField = 1},
        };
        PrintList(list);
        list.Sort(new CustomClassComparer());
        PrintList(list);
        Console.ReadLine();
    }
    private static void PrintList(List<CustomClass> list)
    {
        foreach (var item in list)
        {
            if (item != null)
                Console.WriteLine("MyField: {0}", item.MyField);
            else
                Console.WriteLine("MyField: null");
        }
    }
}

public class CustomClass
{
    public int MyField { get; set; }
}
public class CustomClassComparer : IComparer<CustomClass>
{
    public int Compare(CustomClass x, CustomClass y)
    {
        if (x == null)
        {
            if (y == null)
                return 0;
            return -1;
        }
        if (y == null)
            return 1;

        if (x.MyField == y.MyField)
            return 0;

        if (x.MyField == 2)
            return 1;
        if (x.MyField == 1)
            if (y.MyField == 3)
                return 1;
            else
                return -1;

        return -1;
    }
}

または、あなたのCustomClass IComparable<T>.

于 2013-03-01T02:05:40.997 に答える
0

AFAIKはそのList.Sort場で動作します。この回答で提案されているように、カスタム比較演算子を使用すると、目的を達成できる場合があります。

lCustomClasses.Sort((x, y) => my_compare(x.MyField, y.MyField));
于 2013-03-01T01:40:28.480 に答える