namespace Packt.Shared; public class PersonComparer : IComparer { public int Compare(Person? x, Person? y) { int position; if ((x is not null) && (y is not null)) { if ((x.Name is not null) && (y.Name is not null)) { // if both Name values are not null... // ...compare the Name lengths... int result = x.Name.Length.CompareTo(y.Name.Length); /// ...if they are equal... if (result == 0) { // ...then compare by the Names... return x.Name.CompareTo(y.Name); } else { // ...otherwise compare by the lengths. position = result; } } else if ((x.Name is not null) && (y.Name is null)) { position = -1; // else x Person precedes y Person } else if ((x.Name is null) && (y.Name is not null)) { position = 1; // else x Person follows y Person } else { position = 0; // x Person and y Person are at same position } } else if ((x is not null) && (y is null)) { position = -1; // x Person precedes y Person } else if ((x is null) && (y is not null)) { position = 1; // x Person follows y Person } else { position = 0; // x Person and y Person are at same position } return position; } }