Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's a simple example:</p> <pre><code>public class SortableItem : IComparable&lt;SortableItem&gt; { public int someNumber; #region IComparable&lt;SortableItem&gt; Members public int CompareTo(SortableItem other) { int ret = -1; if (someNumber &lt; other.someNumber) ret = -1; else if (someNumber &gt; other.someNumber) ret = 1; else if (someNumber == other.someNumber) ret = 0; return ret; } #endregion } </code></pre> <p><em>"That's great, but what if I want to be able to control the sort order, or sort by another field?"</em></p> <p>Simple. All we need to do is add few more fields to the object. First we'll add a string for a different sort type and then we'll add a boolean to denote whether we're sorting in descending or ascending order and then add a field which determines which field we want to search by.</p> <pre><code>public class SortableItem : IComparable&lt;SortableItem&gt; { public enum SortFieldType { SortNumber, SortString } public int someNumber = -1; public string someString = ""; public bool descending = true; public SortFieldType sortField = SortableItem.SortFieldType.SortNumber; #region IComparable&lt;SortableItem&gt; Members public int CompareTo(SortableItem other) { int ret = -1; if(sortField == SortableItem.SortFieldType.SortString) { // A lot of other objects implement IComparable as well. // Take advantage of this. ret = someString.CompareTo(other.someString); } else { if (someNumber &lt; other.someNumber) ret = -1; else if (someNumber &gt; other.someNumber) ret = 1; else if (someNumber == other.someNumber) ret = 0; } // A quick way to switch sort order: // -1 becomes 1, 1 becomes -1, 0 stays the same. if(!descending) ret = ret * -1; return ret; } #endregion public override string ToString() { if(sortField == SortableItem.SortFieldType.SortString) return someString; else return someNumber.ToString(); } } </code></pre> <p><em>"Show me how!"</em></p> <p>Well since you asked so nicely.</p> <pre><code>static class Program { static void Main() { List&lt;SortableItem&gt; items = new List&lt;SortableItem&gt;(); SortableItem temp = new SortableItem(); temp.someString = "Hello"; temp.someNumber = 1; items.Add(temp); temp = new SortableItem(); temp.someString = "World"; temp.someNumber = 2; items.Add(temp); SortByString(items); Output(items); SortAscending(items); Output(items); SortByNumber(items); Output(items); SortDescending(items); Output(items); Console.ReadKey(); } public static void SortDescending(List&lt;SortableItem&gt; items) { foreach (SortableItem item in items) item.descending = true; } public static void SortAscending(List&lt;SortableItem&gt; items) { foreach (SortableItem item in items) item.descending = false; } public static void SortByNumber(List&lt;SortableItem&gt; items) { foreach (SortableItem item in items) item.sortField = SortableItem.SortFieldType.SortNumber; } public static void SortByString(List&lt;SortableItem&gt; items) { foreach (SortableItem item in items) item.sortField = SortableItem.SortFieldType.SortString; } public static void Output(List&lt;SortableItem&gt; items) { items.Sort(); for (int i = 0; i &lt; items.Count; i++) Console.WriteLine("Item " + i + ": " + items[i].ToString()); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload