| File: System\Collections\Generic\EqualityComparer.NativeAot.cs | Web Access |
| Project: src\runtime\src\coreclr\nativeaot\System.Private.CoreLib\src\System.Private.CoreLib.csproj (System.Private.CoreLib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using System.Threading; using Internal.IntrinsicSupport; using Internal.Runtime.CompilerServices; namespace System.Collections.Generic { public abstract partial class EqualityComparer<T> : IEqualityComparer, IEqualityComparer<T> { [Intrinsic] private static EqualityComparer<T> Create() { // The compiler will overwrite the Create method with optimized // instantiation-specific implementation. // This body serves as a fallback when instantiation-specific implementation is unavailable. // If that happens, the compiler ensures we generate data structures to make the fallback work // when this method is compiled. if (typeof(T) == typeof(string)) { return Unsafe.As<EqualityComparer<T>>(new StringEqualityComparer()); } return Unsafe.As<EqualityComparer<T>>(EqualityComparerHelpers.GetComparer(typeof(T).TypeHandle)); } public static EqualityComparer<T> Default { [Intrinsic] get; } = Create(); } public sealed partial class EnumEqualityComparer<T> : EqualityComparer<T> where T : struct, Enum { public sealed override bool Equals(T x, T y) { return EqualityComparerHelpers.EnumOnlyEquals(x, y); } } }