从StringComparison
to StringComparer
很简单 - 只需创建一个Dictionary<StringComparison, StringComparer>
:
var map = new Dictionary<StringComparison, StringComparer>
{
{ StringComparison.Ordinal, StringComparer.Ordinal },
// etc
};
有一个StringComparer
对于每一个StringComparison
价值,所以这种方式很容易运作。提个醒,StringComparer.CurrentCulture
取决于当前的线程区域性 - 因此,如果您填充字典,然后修改线程的区域性(或从具有不同区域性的不同线程执行此操作),您最终可能会得到错误的值。您可能想要一个Dictionary<StringComparison, Func<StringComparer>>
:
var map = new Dictionary<StringComparison, Func<StringComparer>>
{
{ StringComparison.Ordinal, () => StringComparer.Ordinal },
// etc
};
然后您可以随时通过调用委托来获取比较器:
var comparer = map[comparison]();
走另一条路是不可行的,因为并非所有StringComparer
has一个合适的StringComparison
。例如,假设我(在英国)创建了一个StringComparer
对于法语(StringComparer.Create(new CultureInfo(..., true))
. Which StringComparison
这代表吗?对于当前文化、不变文化或序数比较来说,这是不正确的。