首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.Net内核中为不同的语言创建StringComparer?

如何在.Net内核中为不同的语言创建StringComparer?
EN

Stack Overflow用户
提问于 2016-06-14 09:06:12
回答 2查看 642关注 0票数 3

我正在尝试为.Net Core1.0重定向一个可移植的C#库。

我曾经做过这样的事情来获得不同语言的字符串比较器,一旦我获得了该语言的CultureInfo对象(通过调用者设置的委托):

代码语言:javascript
复制
IComparer<T> comparer = (IComparer<T>)StringComparer.Create(cultureInfo, caseInsensitive);

.Net核心目前似乎只通过像StringComparer.CurrentCulture这样的属性来支持当前的文化。

对于给定的语言或文化,有没有办法获得一个字符串比较器?

这对于同时使用多种语言的应用程序非常重要,例如用于语言学习的应用程序。

EN

回答 2

Stack Overflow用户

发布于 2016-06-14 09:14:29

docs

每次调用CurrentCulture属性get访问器都会返回一个新的StringComparer对象,如下面的代码所示。

因此,您可以将Thread.CurrentThread.CurrentCulture设置为所需的区域性,然后使用StringComparer.CurrentCulture获取该区域性的StringComparer,然后将Thread.CurrentThread.CurrentCulture设置为下一个所需的区域性,然后获取另一个StringComparer ...等。

票数 4
EN

Stack Overflow用户

发布于 2017-09-05 01:40:26

StringComparer.Create是在.NET标准2.0中添加的,所以你现在就可以使用它了。

但是,如果您希望面向早期版本,则以下内容适用于.NET标准1.0。它通过将CompareInfo (可用)封装在实现IComparer<string>接口的类中来提供相同的功能。

代码语言:javascript
复制
public class CultureAwareStringComparer : IComparer<string>
{
    private readonly CompareOptions _options;
    private readonly CompareInfo _compareInfo;

    public CultureAwareStringComparer(CultureInfo culture, CompareOptions options)
    {
        _options = options;
        _compareInfo = culture.CompareInfo;
    }

    public int Compare(string x, string y)
    {
        return _compareInfo.Compare(x, y, _options);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37801425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档