Я предлагаю
никогда не возвращать NULL, если записанный тип является массивом или коллекцией. Вместо этого верните пустую коллекцию или пустой массив.
Когда тип возвращаемого значения является объектом, вы можете вернуть значение null в зависимости от сценария. Но никогда не глотайте исключение и возвращайте NULL.
Также, если вы возвращаете NULL в любом сценарии, убедитесь, что это задокументировано в методе.
Наилучший подход - реализовать либо IComparable
, либо IComparable
, а затем вызвать List
. Это сделает за вас всю тяжелую работу по сортировке.
Вы можете использовать LINQ:
listOfCars.OrderBy(x => x.CreationDate);
РЕДАКТИРОВАТЬ: при таком подходе легко добавить дополнительные столбцы сортировки:
listOfCars.OrderBy(x => x.CreationDate).ThenBy(x => x.Make).ThenBy(x => x.Whatever);
Класс List
делает это тривиальным для вас, поскольку он содержит метод Sort
. (Он использует алгоритм QuickSort, а не пузырьковую сортировку, которая обычно лучше в любом случае.) Еще лучше, у него есть перегрузка, которая принимает аргумент Comparison
, Это означает, что вы можете передать лямбда-выражение и сделать вещи действительно очень простыми.
Попробуйте следующее:
CarList.Sort((x, y) => DateTime.Compare(x.CreationDate, y.CreationDate));
Я бы просто использовал сборку в методе List.Sort. Он использует алгоритм QuickSort, который в среднем выполняется за O (n log n).
Этот код должен работать для вас, я изменяю ваши свойства на автоматические свойства и определяю статический метод CompareCarSpecs, который просто использует уже существующий DateTime. CompareTo метод.
class Program
{
static void Main(string[] args)
{
List<CarSpecs> cars = new List<CarSpecs>();
cars.Sort(CarSpecs.CompareCarSpecs);
}
}
public class CarSpecs
{
public string CarName { get; set; }
public string CarMaker { get; set; }
public DateTime CreationDate { get; set; }
public static int CompareCarSpecs(CarSpecs x, CarSpecs y)
{
return x.CreationDate.CompareTo(y.CreationDate);
}
}
Надеюсь, это поможет.
Другой вариант - использовать настраиваемый компаратор:
using System;
using System.Collections.Generic;
using System.Text;
namespace Yournamespace
{
class CarNameComparer : IComparer<Car>
{
#region IComparer<Car> Members
public int Compare(Car car1, Car car2)
{
int returnValue = 1;
if (car1 != null && car2 == null)
{
returnValue = 0;
}
else if (car1 == null && car2 != null)
{
returnValue = 0;
}
else if (car1 != null && car2 != null)
{
if (car1.CreationDate.Equals(car2.CreationDate))
{
returnValue = car1.Name.CompareTo(car2.Name);
}
else
{
returnValue = car2.CreationDate.CompareTo(car1.CreationDate);
}
}
return returnValue;
}
#endregion
}
}
, который вы вызываете следующим образом:
yourCarlist.Sort(new CarNameComparer());
Примечание: я не компилировал этот код, поэтому вам, возможно, придется удалить опечатку
Edit: изменено, чтобы средство сравнения сравнивало по дате создания, как запрошено.
Если вам нужен эффективный способ сортировки, я бы посоветовал не использовать пузырьковую сортировку и вместо этого использовать быструю сортировку. Эта страница дает довольно хорошее объяснение алгоритма:
http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=574
Удачи!
Если вы используете 2.0, следующее обсуждение может быть полезно: C # List <> Сортировать по x, затем y
Я бы не стал писать свой собственный алгоритм сортировки, но, если вы все равно собираетесь, посмотрите http://www.sorting-algorithms.com/ для некоторые сравнения различных алгоритмов сортировки ...