public unsafe virtual int Compare(String string1, String string2, CompareOptions options){
if (options == CompareOptions.OrdinalIgnoreCase)
{
return String.Compare(string1, string2, StringComparison.OrdinalIgnoreCase);
}
// Verify the options before we do any real comparison.
if ((options & CompareOptions.Ordinal) != 0)
{
if (options == CompareOptions.Ordinal)
{
//Our paradigm is that null sorts less than any other string and
//that two nulls sort as equal.
if (string1 == null) {
if (string2 == null) {
return (0); // Equal
}
return (-1); // null < non-null
}
if (string2 == null) {
return (1); // non-null > null
}
return String.nativeCompareOrdinal(string1, string2, false);
} else
{
throw new ArgumentException(Environment.GetResourceString("Argument_CompareOptionOrdinal"), "options");
}
}
if ((options & ValidCompareMaskOffFlags) != 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_InvalidFlag"), "options");
}
//Our paradigm is that null sorts less than any other string and
//that two nulls sort as equal.
if (string1 == null) {
if (string2 == null) {
return (0); // Equal
}
return (-1); // null < non-null
}
if (string2 == null) {
return (1); // non-null > null
}
return (Compare(m_pSortingTable, this.m_sortingLCID, string1, string2, options));
}