One more sort method needed

I have a compareTo method that sorts on lastname and then firstname

What if I want anohter way to be able to sort? I want them both but be able to choose.....where and how would that look like?. Right now this is my sort method but I would like to add one that does firstname first and then second name.

A generic collection in your application to be ordered in two different ways one
use of IComparer <T>.   (The Icomapare<T> is done)
#region IComparable<Contact> Members
 
       
        public int CompareTo(Contact other)
        {
            int result = this.LastName.CompareTo(other.LastName);
            if (result == 0)
            {
                result = this.FirstName.CompareTo(other.FirstName);
            }
            return result;
        }
 
 
        #endregion

Open in new window

MickeysAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mike TomlinsonMiddle School Assistant TeacherCommented:
Here's one way to do it...
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            List<Contact> Contacts = new List<Contact>();
            
            Contact ctA = new Contact();
            ctA.FirstName = "Idle";
            ctA.LastName = "Mind";
            Contacts.Add(ctA);
 
            Contact ctB = new Contact();
            ctB.FirstName = "Indiana";
            ctB.LastName = "Jones";
            Contacts.Add(ctB);
 
            Contact ctC = new Contact();
            ctC.FirstName = "Alpha";
            ctC.LastName = "Zebra";
            Contacts.Add(ctC);
 
            Contact.SortOrder = Contact.ContactSortOrder.FirstNameThenLastName;
            Console.WriteLine(Contact.SortOrder.ToString());
            Contacts.Sort();
            foreach (Contact ct in Contacts)
                Console.WriteLine(ct.ToString());
 
            Console.WriteLine();
            Contact.SortOrder = Contact.ContactSortOrder.LastNameThenFirstName;
            Console.WriteLine(Contact.SortOrder.ToString());
            Contacts.Sort();
            foreach (Contact ct in Contacts)
                Console.WriteLine(ct.ToString());
        }
 
    }
 
    public class Contact : IComparable<Contact>
    {
 
        public enum ContactSortOrder { LastNameThenFirstName, FirstNameThenLastName };
        public static ContactSortOrder SortOrder = ContactSortOrder.LastNameThenFirstName;
 
        public string LastName;
        public string FirstName;
 
        public int CompareTo(Contact other)
        {
            if (Contact.SortOrder == ContactSortOrder.LastNameThenFirstName)
            {
                int result = this.LastName.CompareTo(other.LastName);
                if (result == 0)
                {
                    result = this.FirstName.CompareTo(other.FirstName);
                }
                return result;
            }
            else
            {
                int result = this.FirstName.CompareTo(other.FirstName);
                if (result == 0)
                {
                    result = this.LastName.CompareTo(other.LastName);
                }
                return result;
            }
        }
 
        public override string ToString()
        {
            return this.FirstName + " " + this.LastName;
        }
    }

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Göran AnderssonCommented:
To get different sortings, you can add a comparer to the Contact class. Then you can use that in the Sort method:

contact.Sort(new Contact.Comparer(Contact.SortOrder.FirstNameLastName));

public class Contact {
 
   public enum SortOrder { FirstNameLastName, LastNameFirstName }
 
   public class Comparer : IComparer<Contact> {
 
      private SortOrder _sortOrder;
 
      public Comparer(SortOrder sortOrder) {
         _sortOrder = sortOrder;
      }
 
      public int Compare(Contact x, Contact y) {
         int result;
         switch (_sortOrder) {
            case SortOrder.FirstNameLastName:
               result = x.FirstName.CompareTo(y.FirstName);
               if (result == 0) {
                  result = x.LastName.CompareTo(y.LastName);
               }
               break;
            case SortOrder.LastNameFirstName:
               result = x.LastName.CompareTo(y.LastName);
               if (result == 0) {
                  result = x.FirstName.CompareTo(y.FirstName);
               }
               break;
            }
         return result;
      }
 
   }
 
   ...
 
}

Open in new window

0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.