dotnetcore / AgileConfig

基于.NET Core开发的轻量级分布式配置中心 / .NET Core lightweight configuration server
MIT License
1.5k stars 299 forks source link

Revert 131 fixs rename comparer #132

Closed kklldog closed 1 year ago

kklldog commented 1 year ago

use StringComparer.OrdinalIgnoreCase to order the key

tomyangOK commented 1 year ago

嗯,你说的是对的,别使用InvariantCultureIgnoreCase了,换成Ordinal更合适(服务端和客户端都换成Ordinal),这个选项直接使用字符对应的unicode编码进行比较和排序,虽然忽略了语言文化但是对于排序足够了,并且性能也优于OrdinalIgnoreCase,不需要做大小写忽略的动作。

best-practices-strings

@kklldog

kklldog commented 1 year ago

嗯,你说的是对的,别使用InvariantCultureIgnoreCase了,换成Ordinal更合适(服务端和客户端都换成Ordinal),这个选项直接使用字符对应的unicode编码进行比较和排序,虽然忽略了语言文化但是对于排序足够了,并且性能也优于OrdinalIgnoreCase,不需要做大小写忽略的动作。

best-practices-strings

@kklldog

确实,没必要忽略大小写

tomyangOK commented 1 year ago

大佬,客户端和服务端配置MD5比较时的OrderBy写成这种形式吧。 xxx.OrderBy(k => k, StringComparer.Ordinal)

commit

====================

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

kklldog commented 1 year ago

大佬,客户端和服务端配置MD5比较时的OrderBy写成这种形式吧。 xxx.OrderBy(k => k, StringComparer.Ordinal)

commit

====================

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

嗯改好了。