0

我正在尝试学习排序数组的一些示例。示例使用 Id 作为整数来按此属性排序,因为我的对象使用 Guid 数据类型而不是 int 我决定使用 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");}
       }
    }

车库.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 };
        }
       ...
}

程序.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对象garage,而不是cars可能会造成混淆。

我没有对此进行测试,但它是如此简单,它应该可以工作。

于 2012-11-13T10:03:11.303 回答
0

private Car[] cars是在一个块中定义的(在大括号之间),当你写时你在该块之外引用它Array.Sort(cars)

因此,您在某处定义了一个cars类型错误的变量。

如果您Array.Sort在定义数组的同一块中执行此操作,它将起作用。

于 2012-11-13T09:26:23.027 回答