0

配列の並べ替えを学習する際に、いくつかの例に従おうとしています。例では、Id を整数として使用してこのプロパティで並べ替えます。オブジェクトは int ではなく Guid データ型を使用するため、Created DateTime プロパティを使用して配列を並べ替えることにしました。これがコードです

Car.cs
    public class Car:ICar,IComparable
    {
       ... properties
       int IComparable.CompareTo(object)
       {
          Car temp = obj as Car;
          if (temp != null)
          {
             if (this.Created > temp.Created)
                return 1;
             if (this.Created < temp.Created)
                return -1;
            else 
                return 0;
          }
          else {throw new ArgumentException("Parameter is not a Car object");}
       }
    }

Garage.cs

public class Garage : IEnumerable
    {
        private Car[] cars = new Car[4];

        public Garage()
        {
            cars[0] = new Car() { Id = Guid.NewGuid(), Name = "Corolla", Created = DateTime.UtcNow.AddHours(3), CurrentSpeed = 90 };
            cars[1] = new Car() { Id = Guid.NewGuid(), Name = "Mazda", Created = DateTime.UtcNow.AddHours(2), CurrentSpeed = 80 };
        }
       ...
}

Program.cs

 static void Main(string[] args)
        {
           Garage cars = new Garage();
           Console.WriteLine("sorting array:");
           Array.Sort(cars); // error occured
        }

エラー 2 引数 1: 'Car' から 'System.Array' に変換できません

4

2 に答える 2

1

このソリューションは、新しい配列を作成するのではなく、その場で配列をソートすることを前提としています。

クラスにメソッドを追加しますGarage(内部配列を公開する必要がないようにします)。

public void Sort() {
    Array.Sort(cars);
}

次に、プログラムからこのメソッドを呼び出します。

static void Main(string[] args)
{
    Garage garage = new Garage();
    garage.Sort();
    //It should be sorted now if you enumerate over it!
}

混乱を招く可能性があるのではなく、Garageオブジェクトを自由に呼び出すことができます。garagecars

私はこれをテストしていませんが、それはとても簡単なので、うまくいくはずです。

于 2012-11-13T10:03:11.303 に答える
0

あなたprivate Car[] carsはブロック内(中括弧の間)で定義され、あなたが書くときにそのブロックの外でそれを参照しますArray.Sort(cars)

そのため、どこかcarsで間違った型の変数を定義しています。

Array.Sort配列を定義する同じブロックでこれを行うと、機能します。

于 2012-11-13T09:26:23.027 に答える