gpt4 book ai didi

.net - StringComparison 和 StringComparer 之间转换的优雅方式?

转载 作者:行者123 更新时间:2023-12-03 04:44:37 26 4
gpt4 key购买 nike

某些 .NET 方法使用 StringComparison作为参数,有些使用 StringComparer (通常采用 IComparer 的形式)。差异是显而易见的。是否有一些优雅的方法如何从 StringComparer 获取 StringComparison ,反之亦然?

我总是可以编写使用 Case 语句的简单方法,但也许 .NET 中已经存在我所忽略的内容。

最佳答案

StringComparison 出发至StringComparer很简单 - 只需创建一个 Dictionary<StringComparison, StringComparer> :

var map = new Dictionary<StringComparison, StringComparer>
{
{ StringComparison.Ordinal, StringComparer.Ordinal },
// etc
};

有一个StringComparer对于每个 StringComparison值(value),所以这种方式很容易运作。请注意,StringComparer.CurrentCulture取决于当前的线程区域性 - 因此,如果您填充字典,然后修改线程的区域性(或从具有不同区域性的不同线程执行此操作),您最终可能会得到错误的值。您可能想要 Dictionary<StringComparison, Func<StringComparer>> :

var map = new Dictionary<StringComparison, Func<StringComparer>>
{
{ StringComparison.Ordinal, () => StringComparer.Ordinal },
// etc
};

然后您可以随时通过调用委托(delegate)来获取比较器:

var comparer = map[comparison]();

走另一条路是不可行的,因为不是每个 StringComparer 合适的StringComparison 。例如,假设我(在英国)创建一个 StringComparer法语( StringComparer.Create(new CultureInfo(..., true)) 。这代表哪个 StringComparison ?这对于当前区域性、不变区域性或序数比较来说是不正确的。

关于.net - StringComparison 和 StringComparer 之间转换的优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32763927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com