我试图在学习排序数组时遵循一些例子。示例使用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");}
}
}
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'
答案 0 :(得分: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
,这可能令人困惑。
我没有对此进行测试,但它非常简单,它应该可以正常工作。
答案 1 :(得分:0)
您的private Car[] cars
是在一个区块内(花括号之间)定义的,当您编写Array.Sort(cars)
时,您在该区块之外引用它。
所以你可以在某处定义一个错误类型的变量cars
。
如果在定义数组的同一个块中执行Array.Sort
,它将起作用。