Sortowanie listy po imieniu i wieku

0

Mam na razie taki kod, który sortuje po wieku:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Osoba : IComparable<Osoba>
    {
        public string Imie {get; set;}
        public string Nazwisko { get; set; }
        public int Wiek { get; set; }

        public Osoba(string imie, string nazwisko, int wiek)
        {
            this.Imie = imie;
            this.Nazwisko = nazwisko;
            this.Wiek = wiek;
        }

        public override string ToString()
        {
            return this.Imie + " " + this.Nazwisko + ", " + this.Wiek;
        }

        public int CompareTo(Osoba inna)
        {
            return this.Wiek.CompareTo(inna.Wiek);
        }
        static void Main(string[] args)
        {
            List<Osoba> lista = new List<Osoba>();
            lista.Add(new Osoba("Adam", "Dobry", 25));
            lista.Add(new Osoba("Karol", "Dawny", 18));
            lista.Add(new Osoba("Hubert", "Prokos", 22));

            lista.Sort();

            foreach(Osoba os in lista)
            {
                Console.WriteLine(os);
            }
        }
    }

Jak zrobić aby jeszcze było oddzielne sortowanie po imieniu ? Próbowałem tak, ale pokazuje mi ciągle błędy:

 public class SortByName : IComparable<Osoba>
    {
        public int CompareTo(Osoba pierwsza, Osoba druga)
        {
            return pierwsza.Imie.CompareTo(druga.Imie);
        }
    }
0
        class c
        {
            public int Wiek { get; set; }
            public int Imie { get; set; }
        }
////
            List<c> lista = new List<c>();
             lista.OrderBy(x => x.Imie);
             lista.OrderBy(x => x.Wiek);
            lista.OrderBy(x => x.Imie).ThenByDescending(y => y.Wiek);
0

I tyle wystarczy ? Czy korzystamy wtedy z LINQ ? To nie trzeba używać metod CompareTo ?

0

Zmieniłem kod na taki i nie grupuje według imion, tym sposobem, który podałeś:

 namespace ConsoleApplication1
{
    class Osoba : IComparable<Osoba>
    {
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public int Wiek { get; set; }

        public Osoba(string imie, string nazwisko, int wiek)
        {
            this.Imie = imie;
            this.Nazwisko = nazwisko;
            this.Wiek = wiek;
        }

        public override string ToString()
        {
            return this.Imie + " " + this.Nazwisko + ", " + this.Wiek;
        }

        public int CompareTo(Osoba inna)
        {
            return this.Wiek.CompareTo(inna.Wiek);
        }
        static void Main(string[] args)
        {
            List<Osoba> lista = new List<Osoba>();
            lista.Add(new Osoba("Adam", "Dobry", 25));
            lista.Add(new Osoba("Karol", "Dawny", 18));
            lista.Add(new Osoba("Hubert", "Prokos", 22));

            lista.OrderBy(x => x.Imie);

            foreach (Osoba os in lista)
            {
                Console.WriteLine(os);
            }
        }
    }
}
0
foreach (Osoba os in lista.OrderBy(x=>x.Imie))
0

Można też tak prawda: ?

 var abc = lista.OrderBy(x => x.Wiek);

            foreach (var os in abc)
            {
                Console.WriteLine(os);
            }
0

można

1 użytkowników online, w tym zalogowanych: 0, gości: 1