268. StructuralComparisons StructuralComparer

בהמשך לפעמים הקודמות, קיים Out of the box בFramework הProperty הסטטי בשם StructuralComparisons.StructuralComparer.

בדומה לStructuralComparisons.StructuralEqualityComparer, הProperty הזה מאפשר לנו להשוואות שני IStructuralComparable ע”י קריאה לCompareTo שלהם והעברת עצמו:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
internal class StructuralComparer : IComparer
{
public int Compare(object x,object y)
{
if (x == null)
{
if (y != null)
{
return -1;
}
else
{
return 0;
}
}
else
{
if (y == null)
{
return 1;
}
IStructuralComparable structuralComparable = x as IStructuralComparable;
if (structuralComparable != null)
{
return structuralComparable.CompareTo(y, this);
}
else
{
return Comparer.Default.Compare(x, y);
}
}
}
}

שוב, הדבר טוב אם אנחנו מרוצים מההשוואה הרגילה של הטיפוסים שלנו (המתבצעת באמצעות השורה Comparer.Default.Compare(x, y);, ע"י קריאה לCompareTo של IComparable, במידה והטיפוסים שלנו מממשים אותו).

במידה ואנחנו לא מרוצים מההשוואה הרגילה של הטיפוסים שלנו, נצטרך לכתוב Comparer מיוחד היודע לקבל Comparer איתו הוא משווה את האיברים (במקום קריאה לComparer.Default.Compare(x, y);, נקרא לComparer אותו קיבל הComparer שלנו)

המשך יום בר השוואה טוב!

שתף