Skip to content

Commit 0ab7793

Browse files
stephentoubmatouskozak
authored andcommitted
Avoid unnecessary lazy init in StructuralComparisons (dotnet#101344)
* Avoid unnecessary lazy init in StructuralComparisons Move the fields to the target types and make them readonly instead of manually lazy. * Update StructuralComparisons.cs
1 parent b000415 commit 0ab7793

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/libraries/System.Collections/src/System/Collections/StructuralComparisons.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@ namespace System.Collections
77
{
88
public static class StructuralComparisons
99
{
10-
private static volatile IComparer? s_StructuralComparer;
11-
private static volatile IEqualityComparer? s_StructuralEqualityComparer;
10+
public static IComparer StructuralComparer => System.Collections.StructuralComparer.s_instance;
1211

13-
public static IComparer StructuralComparer => s_StructuralComparer ??= new StructuralComparer();
14-
15-
public static IEqualityComparer StructuralEqualityComparer => s_StructuralEqualityComparer ??= new StructuralEqualityComparer();
12+
public static IEqualityComparer StructuralEqualityComparer => System.Collections.StructuralEqualityComparer.s_instance;
1613
}
1714

1815
internal sealed class StructuralEqualityComparer : IEqualityComparer
1916
{
17+
internal static readonly StructuralEqualityComparer s_instance = new();
18+
2019
public new bool Equals(object? x, object? y)
2120
{
2221
if (x != null)
@@ -58,6 +57,8 @@ public int GetHashCode(object obj)
5857

5958
internal sealed class StructuralComparer : IComparer
6059
{
60+
internal static readonly StructuralComparer s_instance = new();
61+
6162
public int Compare(object? x, object? y)
6263
{
6364
if (x == null) return y == null ? 0 : -1;

0 commit comments

Comments
 (0)