public static int CompareAsVersionTo([CanBeNull] this string a, [CanBeNull] string b) {
if (a == null) return b == null ? 0 : -1;
if (b == null) return 1;
var ap = a.Split('.');
var bp = b.Split('.');
for (var i = 0; i < ap.Length && i < bp.Length; i++) {
var c = AlphanumComparatorFast.Compare(ap[i], bp[i]);
if (c != 0) return c;
}
return ap.Length - bp.Length;
}