public static long compareIgnoreCase(string a, string b)
{
if (a == b) return 0;
int an = a.Length;
int bn = b.Length;
for (int i=0; i<an && i<bn; i++)
{
int ac = a[i];
int bc = b[i];
if ('A' <= ac && ac <= 'Z') ac |= 0x20;
if ('A' <= bc && bc <= 'Z') bc |= 0x20;
if (ac != bc) return ac < bc ? -1 : +1;
}
if (an == bn) return 0;
return an < bn ? -1 : +1;
}