String.CompareOrdinalメソッドは、Compareメソッド同様に文字列の比較を行う静的メソッドですが、比較の際に文字列の各文字を数値(Unicode序数Unicode ordinal)、つまり各文字のコードポイントでの比較を行う点で動作が異なります。

Compareメソッドでオプションを特に指定しない場合、現在のスレッドの(もしくは引数で指定された)カルチャの規則にしたがった比較を行うのに対し、CompareOrdinalメソッドでは常にカルチャに依存しない比較が行われます。

String.CompareOrdinalメソッドでコードポイントによって文字列を比較する
using System;

class Sample {
  static void Main()
  {
    var p1 = new string[] {"abc", "abd"};
    var p2 = new string[] {"coop", "co-op"};
    var p3 = new string[] {"cant", "can't"};

    Console.WriteLine("Compare       ({0}, {1}) : {2}", p1[0], p1[1], String.Compare(p1[0], p1[1]));
    Console.WriteLine("CompareOrdinal({0}, {1}) : {2}", p1[0], p1[1], String.CompareOrdinal(p1[0], p1[1]));

    Console.WriteLine("Compare       ({0}, {1}) : {2}", p2[0], p2[1], String.Compare(p2[0], p2[1]));
    Console.WriteLine("CompareOrdinal({0}, {1}) : {2}", p2[0], p2[1], String.CompareOrdinal(p2[0], p2[1]));

    Console.WriteLine("Compare       ({0}, {1}) : {2}", p3[0], p3[1], String.Compare(p3[0], p3[1]));
    Console.WriteLine("CompareOrdinal({0}, {1}) : {2}", p3[0], p3[1], String.CompareOrdinal(p3[0], p3[1]));
  }
}
実行結果
Compare       (abc, abd) : -1
CompareOrdinal(abc, abd) : -1
Compare       (coop, co-op) : -1
CompareOrdinal(coop, co-op) : 66
Compare       (cant, can't) : -1
CompareOrdinal(cant, can't) : 77

CompareメソッドとCompareOrdinalメソッドで大小関係が反転している箇所に注目してください。

CompareTo・Compare・Equalsの各メソッドでも、StringComparisonを指定することによってCompareOrdinalメソッドと同様の比較方法を使用するように指定できます。 これについては文字列と比較オプション・カルチャの並べ替え規則 §.StringComparison列挙型とStringComparerクラスで詳しく説明しています。