BackCompatibleStringComparer
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace System.Collections.Specialized
{
[NullableContext(1)]
[Nullable(0)]
internal class BackCompatibleStringComparer : IEqualityComparer<string>
{
internal static IEqualityComparer<string> Default { get; } = new BackCompatibleStringComparer();
internal BackCompatibleStringComparer()
{
}
public unsafe int GetHashCode([DisallowNull] string obj)
{
IntPtr intPtr;
if (obj == null)
intPtr = (IntPtr)(void*)null;
else {
ref pinnableReference = ref obj.GetPinnableReference();
intPtr = (IntPtr)(&pinnableReference);
}
int num = 5381;
char* ptr = (char*)(long)intPtr;
int num2;
while ((num2 = *ptr) != 0) {
num = (((num << 5) + num) ^ num2);
ptr++;
}
return num;
}
[NullableContext(2)]
public bool Equals(string x, string y)
{
return object.Equals(x, y);
}
public virtual int GetHashCode(object o)
{
string text = o as string;
if (text == null)
return o.GetHashCode();
return GetHashCode(text);
}
}
}