2

ArrayListカスタムアイテムを並べ替えて、「少なくとも1つのオブジェクトがIComparableを実装する必要があります」を取得しようとしています。IComparableそれらのインターフェースを実装したにもかかわらず。私は単にデフォルトSort()のパラメータなしと呼んでいます。並べ替えようとしているオブジェクトの定義は次のとおりです。

class AssetItem : System.IComparable<AssetItem>
{
        public string AssetName { get; set; }
        public int AssetID { get; set; }

        public int CompareTo(AssetItem item)
        {
            if (null == item)
            {
                return 1;
            }
            else if (this.AssetID < item.AssetID)
            {
                return -1;
            }
            else if (this.AssetID == item.AssetID)
            {
                return this.AssetName.CompareTo(item.AssetName);
            }
            else
            {
                return 1;
            }
        }

このコードは問題なくビルドされます。もう1つ覚えておくべきことがあります。方法はわかりませんが、これが問題になる可能性があると思います。上記のクラスは内部クラスです。それが私をつまずかせているのであれば、どのようにして内部クラスを比較しますか?

4

3 に答える 3

9

を実装IComparable<T>しましたが、ではありませんIComparable。それらは異なるインターフェースです。ジェネリックスを使用する場合はList<T>、最初からを使用してください。つまり、実装することもできますがIComparable、私があなたであれば、やや時代遅れの非ジェネリックコレクションから離れるだけです。

于 2009-10-05T16:47:15.013 に答える
3

プロジェクトでLINQを使用できますか?その場合、必要なのがプロパティによる並べ替えだけであれば、IComparableを実装する必要はありません。あなたはただすることができます:

theAssetsList.OrderBy(asset => asset.AssetId);
于 2009-10-05T16:51:55.440 に答える
0

また、試すこともできます.. list = new List(list.OrderBy(x => x.Text));

于 2013-06-11T11:10:55.310 に答える