Operator == czy statyczna albo instancyjna meda Equals to jest to samo . Operator == wywołuje statyczną metodę Equals .
Porównywanie polega na tym :
- najpierw sprawdzane są referencje czy nie porównujemy tego samego łańcucha . Jeśli to jest ta sama referencja to wynik jest true - koniec sprawdzania
- drugie sprawdzenie jeśli któryś z łańcuchów ma referencję null to wynik false - koniec sprawdzania
3 trzecie sprawdzenie czy łańcuchy mają tę samą długość . Jeśli nie to false - koniec sprawdzania
Jeśli wszystkie warunki mają wartość false to wywoływana jest metoda
[SecuritySafeCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
private unsafe static bool EqualsHelper(string strA, string strB)
{
int num = strA.Length;
fixed (char* ptr = &strA.m_firstChar)
{
fixed (char* ptr3 = &strB.m_firstChar)
{
char* ptr2 = ptr;
char* ptr4 = ptr3;
while (num >= 12)
{
if (*(long*)ptr2 != *(long*)ptr4)
{
return false;
}
if (*(long*)(ptr2 + 4) != *(long*)(ptr4 + 4))
{
return false;
}
if (*(long*)(ptr2 + 8) != *(long*)(ptr4 + 8))
{
return false;
}
ptr2 += 12;
ptr4 += 12;
num -= 12;
}
while (num > 0 && *(int*)ptr2 == *(int*)ptr4)
{
ptr2 += 2;
ptr4 += 2;
num -= 2;
}
return num <= 0;
}
}
}