Как производить сортировку по различным полям - C#

Узнай цену своей работы

Формулировка задачи:

Это можно делать с помощью Linq вроде бы. Но я вот уперся в интерфейс IComparable. Можно ли отсортировать по разным полям, меняя каким-то образом CompareTo()? ...И почему компилятор допускает вот такой ошибочный (неопределенный) код:
        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;
        }
И в одном и в другом методе параметром будет объект InvoiceMaker

Решение задачи: «Как производить сортировку по различным полям»

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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы