Skip to content

Commit fe240b4

Browse files
committed
Move comparer into SortDescription
This way the Comparer property on SortDescription is never null
1 parent ff357ad commit fe240b4

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

Microsoft.Toolkit.Uwp.UI/AdvancedCollectionView/AdvancedCollectionView.cs

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,7 @@ int IComparer<object>.Compare(object x, object y)
394394

395395
try
396396
{
397-
var comparer = sd.Comparer ?? ComparerAdapter.Instance;
398-
var cmp = comparer.Compare(cx, cy);
397+
var cmp = sd.Comparer.Compare(cx, cy);
399398

400399
if (cmp != 0)
401400
{
@@ -604,23 +603,5 @@ private bool MoveCurrentToIndex(int i)
604603
OnCurrentChanged(null);
605604
return true;
606605
}
607-
608-
private class ComparerAdapter : IComparer
609-
{
610-
public static readonly IComparer Instance = new ComparerAdapter();
611-
612-
private ComparerAdapter()
613-
{
614-
}
615-
616-
public int Compare(object x, object y)
617-
{
618-
var cx = x as IComparable;
619-
var cy = y as IComparable;
620-
621-
// ReSharper disable once PossibleUnintendedReferenceComparison
622-
return cx == cy ? 0 : cx == null ? -1 : cy == null ? +1 : cx.CompareTo(cy);
623-
}
624-
}
625606
}
626607
}

Microsoft.Toolkit.Uwp.UI/AdvancedCollectionView/SortDescription.cs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE.
1111
// ******************************************************************
1212

13+
using System;
1314
using System.Collections;
1415

1516
namespace Microsoft.Toolkit.Uwp.UI
@@ -40,8 +41,8 @@ public class SortDescription
4041
/// </summary>
4142
/// <param name="direction">direction of sort</param>
4243
public SortDescription(SortDirection direction)
44+
: this(null, direction, ObjectComparer.Instance)
4345
{
44-
Direction = direction;
4546
}
4647

4748
/// <summary>
@@ -51,9 +52,8 @@ public SortDescription(SortDirection direction)
5152
/// <param name="direction">directio of sort</param>
5253
/// <param name="comparer">comparer to use</param>
5354
public SortDescription(SortDirection direction, IComparer comparer)
55+
: this(null, direction, comparer)
5456
{
55-
Direction = direction;
56-
Comparer = comparer;
5757
}
5858

5959
/// <summary>
@@ -62,9 +62,8 @@ public SortDescription(SortDirection direction, IComparer comparer)
6262
/// <param name="propertyName">name of property to sort on</param>
6363
/// <param name="direction">direction of sort</param>
6464
public SortDescription(string propertyName, SortDirection direction)
65+
: this(propertyName, direction, ObjectComparer.Instance)
6566
{
66-
PropertyName = propertyName;
67-
Direction = direction;
6867
}
6968

7069
/// <summary>
@@ -79,5 +78,23 @@ public SortDescription(string propertyName, SortDirection direction, IComparer c
7978
Direction = direction;
8079
Comparer = comparer;
8180
}
81+
82+
private class ObjectComparer : IComparer
83+
{
84+
public static readonly IComparer Instance = new ObjectComparer();
85+
86+
private ObjectComparer()
87+
{
88+
}
89+
90+
public int Compare(object x, object y)
91+
{
92+
var cx = x as IComparable;
93+
var cy = y as IComparable;
94+
95+
// ReSharper disable once PossibleUnintendedReferenceComparison
96+
return cx == cy ? 0 : cx == null ? -1 : cy == null ? +1 : cx.CompareTo(cy);
97+
}
98+
}
8299
}
83100
}

0 commit comments

Comments
 (0)