Closed kklldog closed 1 year ago
嗯,你说的是对的,别使用InvariantCultureIgnoreCase了,换成Ordinal更合适(服务端和客户端都换成Ordinal),这个选项直接使用字符对应的unicode编码进行比较和排序,虽然忽略了语言文化但是对于排序足够了,并且性能也优于OrdinalIgnoreCase,不需要做大小写忽略的动作。
@kklldog
嗯,你说的是对的,别使用InvariantCultureIgnoreCase了,换成Ordinal更合适(服务端和客户端都换成Ordinal),这个选项直接使用字符对应的unicode编码进行比较和排序,虽然忽略了语言文化但是对于排序足够了,并且性能也优于OrdinalIgnoreCase,不需要做大小写忽略的动作。
@kklldog
确实,没必要忽略大小写
大佬,客户端和服务端配置MD5比较时的OrderBy写成这种形式吧。 xxx.OrderBy(k => k, StringComparer.Ordinal)
====================
OrderBy默认是考虑语言文化进行排序的(StringComparison.CurrentCulture)
IEnumerable<>.OrderBy(keySelector, comparer),keySelector最终选定的字段是string类型,如果comparer参数没有传入的话,
内部使用Comparer
public int CompareTo(string? strB) { return string.Compare(this, strB, StringComparison.CurrentCulture); }
@kklldog
大佬,客户端和服务端配置MD5比较时的OrderBy写成这种形式吧。 xxx.OrderBy(k => k, StringComparer.Ordinal)
====================
OrderBy默认是考虑语言文化进行排序的(StringComparison.CurrentCulture)
IEnumerable<>.OrderBy(keySelector, comparer),keySelector最终选定的字段是string类型,如果comparer参数没有传入的话, 内部使用Comparer.Default实例(GenericComparer)的Compare(string a, string b)方法去比较两个字符串,内部是直接使用a.CompareTo(b)
public int CompareTo(string? strB) { return string.Compare(this, strB, StringComparison.CurrentCulture); }
@kklldog
嗯改好了。
use StringComparer.OrdinalIgnoreCase to order the key