Как производить сортировку по различным полям - C#
Формулировка задачи:
Это можно делать с помощью Linq вроде бы. Но я вот уперся в интерфейс IComparable. Можно ли отсортировать по разным полям, меняя каким-то образом CompareTo()? ...И почему компилятор допускает вот такой ошибочный (неопределенный) код:
И в одном и в другом методе параметром будет объект InvoiceMaker
public int CompareTo(object invoice) { if (this._purchaseDayOfMonth.DayOfMonth < ((InvoiceMaker) invoice)._purchaseDayOfMonth.DayOfMonth) return -1; if (this._purchaseDayOfMonth.DayOfMonth > ((InvoiceMaker) invoice)._purchaseDayOfMonth.DayOfMonth) return 1; return 0; } public int CompareTo(InvoiceMaker invoice) { if (this._discountOption < invoice._discountOption) return -1; if (this._discountOption > invoice._discountOption) return 1; return 0; }
Решение задачи: «Как производить сортировку по различным полям»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ComparationTest { class Program { static void Main(string[] args) { DataObject[] dataObjects = new DataObject[] { new DataObject{ ID=1, FirstName="Mike", LastName="Willis" }, new DataObject{ ID=9, FirstName="Kelly", LastName="Stivenson" }, new DataObject{ ID=2, FirstName="Larry", LastName="Key" }, new DataObject{ ID=6, FirstName="Mary", LastName="Jay" }, new DataObject{ ID=3, FirstName="Dart", LastName="Weider" } }; foreach (var obj in dataObjects) { Console.WriteLine(obj); } Console.WriteLine(); Array.Sort(dataObjects, new IDComparer()); foreach (var obj in dataObjects) { Console.WriteLine(obj); } Console.WriteLine(); Console.ReadLine(); } } class IDComparer : IComparer<DataObject> { public int Compare(DataObject x, DataObject y) { return x.ID.CompareTo(y.ID); } } class FNameComparer : IComparer<DataObject> { public int Compare(DataObject x, DataObject y) { return x.FirstName.CompareTo(y.FirstName); } } class LNameComparer : IComparer<DataObject> { public int Compare(DataObject x, DataObject y) { return x.LastName.CompareTo(y.LastName); } } class DataObject { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format("ID: {0}, FirstName: {1}, LastName: {2}", ID, FirstName, LastName); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д