Witam :)
Dawno nie pisalem tu ale cos i od siebie powiem:
Dla wgladu zamieszczam kody funkcji Equlas:
public static bool Equals (string a, string b)
{
if (a == b)
{
return true;
}
else if (a == null)
{
return false;
}
else if (b != null)
{
return string.EqualsHelper (a, b);
}
else
{
return false;
}
}
private static unsafe bool EqualsHelper (string strA, string strB)
{
char* char_Ptr3;
char* char_Ptr4;
int i1 = strA.Length;
if (i1 != strB.Length)
{
return false;
}
else
{
fixed (char* char_Ptr1 = (strA + RuntimeHelpers.OffsetToStringData))
{
fixed (char* char_Ptr2 = (strB + RuntimeHelpers.OffsetToStringData))
{
char_Ptr3 = char_Ptr1;
char_Ptr4 = char_Ptr2;
while (i1 >= 10)
{
if ((((((* char_Ptr3) != (* char_Ptr4)) || ((* (char_Ptr3 + 2)) != (* (char_Ptr4 + 2)))) || ((* (char_Ptr3 + 4)) != (* (char_Ptr4 + 4)))) || ((* (char_Ptr3 + 6)) != (* (char_Ptr4 + 6)))) || ((* (char_Ptr3 + 8)) != (* (char_Ptr4 + 8))))
{
break;
}
char_Ptr3 += 20;
char_Ptr4 += 20;
i1 -= 10;
}
while ((i1 > 0) && ((* char_Ptr3) == (* char_Ptr4)))
{
char_Ptr3 += 4;
char_Ptr4 += 4;
i1 -= 2;
}
return (i1 <= 0);
}
}
}
}
funkcji Compare:
public int CompareTo (string strB)
{
if (strB != null)
{
return CultureInfo.CurrentCulture.CompareInfo.Compare (this, strB, CompareOptions.None);
}
else
{
return 1;
}
}
public static int Compare (string strA, string strB)
{
return CultureInfo.CurrentCulture.CompareInfo.Compare (strA, strB, CompareOptions.None);
}
//CompareInfo.Compare
public virtual int Compare (string string1, string string2)
{
return this.Compare (string1, string2, CompareOptions.None);
}
//CompareInfo.Compare
public unsafe virtual int Compare (string string1, string string2, CompareOptions options)
{
if (options == CompareOptions.OrdinalIgnoreCase)
{
return string.Compare (string1, string2, StringComparison.OrdinalIgnoreCase);
}
else if ((options & CompareOptions.Ordinal) != CompareOptions.None)
{
if (options == CompareOptions.Ordinal)
{
if (string1 == null)
{
if (string2 != null)
{
return -1;
}
else
{
return 0;
}
}
if (string2 != null)
{
return string.nativeCompareOrdinal (string1, string2, false);
}
else
{
return 1;
}
}
throw new ArgumentException (Environment.GetResourceString ("Argument_CompareOptionOrdinal"), "options");
}
else if ((options & (~ (CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth | CompareOptions.StringSort))) != CompareOptions.None)
{
throw new ArgumentException (Environment.GetResourceString ("Argument_InvalidFlag"), "options");
}
else
{
if (string1 == null)
{
if (string2 != null)
{
return -1;
}
else
{
return 0;
}
}
if (string2 == null)
{
return 1;
}
else if (! this.IsSynthetic)
{
return CompareInfo.Compare (this.m_pSortingTable, this.m_sortingLCID, string1, string2, options);
}
else if (options != CompareOptions.Ordinal)
{
return CompareInfo.nativeCompareString (this.m_sortingLCID, string1, 0, string1.Length, string2, 0, string2.Length, CompareInfo.GetNativeCompareFlags (options));
}
else
{
return CompareInfo.Compare (CultureInfo.InvariantCulture.CompareInfo.m_pSortingTable, this.m_sortingLCID, string1, string2, options);
}
}
}
Sami wysnujcie wnioski ;)
niestety nie posiadam kodów funkcji operatorowej string.==