Back to Home

How to sort a list in C#

You can sort a list in C# using the Sort() method for in-place sorting, or LINQ's OrderBy() for creating a new sorted sequence. The Sort() method modifies the original list, while OrderBy() returns a new sorted IEnumerable<T>.

For descending order, use Sort() with a comparison delegate, or LINQ's OrderByDescending(). Custom sorting can be achieved with IComparer<T> or lambda expressions.

Sorting objects requires specifying which property to sort by using OrderBy(x => x.PropertyName) or implementing IComparable<T> on the class.

C# Example Code
using System;
using System.Collections.Generic;
using System.Linq;

// Sort numbers ascending
List<int> numbers = new List<int> { 5, 2, 8, 1, 9, 3 };
numbers.Sort();  // In-place sort
Console.WriteLine("Sorted numbers: " + string.Join(", ", numbers));

// Sort numbers descending
List<int> numbers2 = new List<int> { 5, 2, 8, 1, 9, 3 };
numbers2.Sort((a, b) => b.CompareTo(a));  // Reverse comparison
Console.WriteLine("Descending: " + string.Join(", ", numbers2));

// Sort strings alphabetically
List<string> names = new List<string> { "Charlie", "Alice", "Bob", "David" };
names.Sort();
Console.WriteLine("Sorted names: " + string.Join(", ", names));

// Using LINQ OrderBy (creates new sequence)
List<int> numbers3 = new List<int> { 5, 2, 8, 1, 9, 3 };
var sorted = numbers3.OrderBy(n => n).ToList();
Console.WriteLine("LINQ OrderBy: " + string.Join(", ", sorted));

// OrderByDescending
var descending = numbers3.OrderByDescending(n => n).ToList();
Console.WriteLine("LINQ Descending: " + string.Join(", ", descending));

// Sorting objects by property
List<Person> people = new List<Person>
{
    new Person("Charlie", 35),
    new Person("Alice", 25),
    new Person("Bob", 30)
};

// Sort by name
var sortedByName = people.OrderBy(p => p.Name).ToList();
Console.WriteLine("\nSorted by name:");
foreach (var person in sortedByName)
{
    Console.WriteLine($"  {person.Name}: {person.Age}");
}

// Sort by age
var sortedByAge = people.OrderBy(p => p.Age).ToList();
Console.WriteLine("\nSorted by age:");
foreach (var person in sortedByAge)
{
    Console.WriteLine($"  {person.Name}: {person.Age}");
}

// Multiple sorting criteria
var multiSort = people.OrderBy(p => p.Age).ThenBy(p => p.Name).ToList();
Console.WriteLine("\nSorted by age, then name:");
foreach (var person in multiSort)
{
    Console.WriteLine($"  {person.Name}: {person.Age}");
}

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

Take It Further

C# 12 and .NET 8 book cover

The most comprehensive book covering C# 12 and .NET 8 from scratch to production.

C# 12 and .NET 8 — Modern Cross-Platform Development · Mark J. Price

Get it on Amazon →

As an Amazon Associate I earn from qualifying purchases.