Skip to content

Commit 745c149

Browse files
authored
Avoid boxing in FrugalList (#4724)
All comparisons are being performed with object.Equals(object). If T is a value type, every comparison ends up boxing the argument.
1 parent 9f77f68 commit 745c149

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

src/Microsoft.DotNet.Wpf/src/Shared/MS/Utility/FrugalList.cs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,12 @@ public override void Clear()
265265

266266
public override bool Contains(T value)
267267
{
268-
return _loneEntry.Equals(value);
268+
return EqualityComparer<T>.Default.Equals(_loneEntry, value);
269269
}
270270

271271
public override int IndexOf(T value)
272272
{
273-
if (_loneEntry.Equals(value))
273+
if (EqualityComparer<T>.Default.Equals(_loneEntry, value))
274274
{
275275
return 0;
276276
}
@@ -298,7 +298,7 @@ public override void SetAt(int index, T value)
298298
public override bool Remove(T value)
299299
{
300300
// Wipe out the info in the only entry if it matches the item.
301-
if (_loneEntry.Equals(value))
301+
if (EqualityComparer<T>.Default.Equals(_loneEntry, value))
302302
{
303303
_loneEntry = default(T);
304304
--_count;
@@ -440,17 +440,17 @@ public override bool Contains(T value)
440440

441441
public override int IndexOf(T value)
442442
{
443-
if (_entry0.Equals(value))
443+
if (EqualityComparer<T>.Default.Equals(_entry0, value))
444444
{
445445
return 0;
446446
}
447447
if (_count > 1)
448448
{
449-
if (_entry1.Equals(value))
449+
if (EqualityComparer<T>.Default.Equals(_entry1, value))
450450
{
451451
return 1;
452452
}
453-
if ((3 == _count) && (_entry2.Equals(value)))
453+
if ((3 == _count) && EqualityComparer<T>.Default.Equals(_entry2, value))
454454
{
455455
return 2;
456456
}
@@ -516,19 +516,19 @@ public override bool Remove(T value)
516516
// If the item matches an existing entry, wipe out the last
517517
// entry and move all the other entries up. Because we only
518518
// have three entries we can just unravel all the cases.
519-
if (_entry0.Equals(value))
519+
if (EqualityComparer<T>.Default.Equals(_entry0, value))
520520
{
521521
RemoveAt(0);
522522
return true;
523523
}
524524
else if ( _count > 1)
525525
{
526-
if (_entry1.Equals(value))
526+
if (EqualityComparer<T>.Default.Equals(_entry1, value))
527527
{
528528
RemoveAt(1);
529529
return true;
530530
}
531-
else if ((3 == _count) && (_entry2.Equals(value)))
531+
else if ((3 == _count) && EqualityComparer<T>.Default.Equals(_entry2, value))
532532
{
533533
RemoveAt(2);
534534
return true;
@@ -781,35 +781,35 @@ public override bool Contains(T value)
781781

782782
public override int IndexOf(T value)
783783
{
784-
if (_entry0.Equals(value))
784+
if (EqualityComparer<T>.Default.Equals(_entry0, value))
785785
{
786786
return 0;
787787
}
788788
if (_count > 1)
789789
{
790-
if (_entry1.Equals(value))
790+
if (EqualityComparer<T>.Default.Equals(_entry1, value))
791791
{
792792
return 1;
793793
}
794794
if (_count > 2)
795795
{
796-
if (_entry2.Equals(value))
796+
if (EqualityComparer<T>.Default.Equals(_entry2, value))
797797
{
798798
return 2;
799799
}
800800
if (_count > 3)
801801
{
802-
if (_entry3.Equals(value))
802+
if (EqualityComparer<T>.Default.Equals(_entry3, value))
803803
{
804804
return 3;
805805
}
806806
if (_count > 4)
807807
{
808-
if (_entry4.Equals(value))
808+
if (EqualityComparer<T>.Default.Equals(_entry4, value))
809809
{
810810
return 4;
811811
}
812-
if ((6 == _count) && (_entry5.Equals(value)))
812+
if ((6 == _count) && EqualityComparer<T>.Default.Equals(_entry5, value))
813813
{
814814
return 5;
815815
}
@@ -914,40 +914,40 @@ public override bool Remove(T value)
914914
// If the item matches an existing entry, wipe out the last
915915
// entry and move all the other entries up. Because we only
916916
// have six entries we can just unravel all the cases.
917-
if (_entry0.Equals(value))
917+
if (EqualityComparer<T>.Default.Equals(_entry0, value))
918918
{
919919
RemoveAt(0);
920920
return true;
921921
}
922922
else if (_count > 1)
923923
{
924-
if (_entry1.Equals(value))
924+
if (EqualityComparer<T>.Default.Equals(_entry1, value))
925925
{
926926
RemoveAt(1);
927927
return true;
928928
}
929929
else if (_count > 2)
930930
{
931-
if (_entry2.Equals(value))
931+
if (EqualityComparer<T>.Default.Equals(_entry2, value))
932932
{
933933
RemoveAt(2);
934934
return true;
935935
}
936936
else if (_count > 3)
937937
{
938-
if (_entry3.Equals(value))
938+
if (EqualityComparer<T>.Default.Equals(_entry3, value))
939939
{
940940
RemoveAt(3);
941941
return true;
942942
}
943943
else if (_count > 4)
944944
{
945-
if (_entry4.Equals(value))
945+
if (EqualityComparer<T>.Default.Equals(_entry4, value))
946946
{
947947
RemoveAt(4);
948948
return true;
949949
}
950-
else if ((6 == _count) && (_entry5.Equals(value)))
950+
else if ((6 == _count) && EqualityComparer<T>.Default.Equals(_entry5, value))
951951
{
952952
RemoveAt(5);
953953
return true;
@@ -1392,7 +1392,7 @@ public override int IndexOf(T value)
13921392
{
13931393
for (int index = 0; index < _count; ++index)
13941394
{
1395-
if (_entries[index].Equals(value))
1395+
if (EqualityComparer<T>.Default.Equals(_entries[index], value))
13961396
{
13971397
return index;
13981398
}
@@ -1425,7 +1425,7 @@ public override bool Remove(T value)
14251425
{
14261426
for (int index = 0; index < _count; ++index)
14271427
{
1428-
if (_entries[index].Equals(value))
1428+
if (EqualityComparer<T>.Default.Equals(_entries[index], value))
14291429
{
14301430
RemoveAt(index);
14311431
return true;

0 commit comments

Comments
 (0)