public static string ToInvariantString([NotNull] this object o) {
if (o == null) throw new ArgumentNullException(nameof(o));
var s = o as string;
if (s != null) return s;
if (o is double) return ((double)o).ToInvariantString();
if (o is float) return ((float)o).ToInvariantString();
if (o is int) return ((int)o).ToInvariantString();
if (o is uint) return ((uint)o).ToInvariantString();
if (o is short) return ((short)o).ToInvariantString();
if (o is ushort) return ((ushort)o).ToInvariantString();
return o.ToString();
}
}