2016-06-14 9 views
3

私は、.Netコア1.0用の移植可能なC#ライブラリのターゲットを変更しようとしています。.Net Coreで異なる言語のStringComparerを作成するにはどうすればいいですか?

私は言語のためのCultureInfoオブジェクトを取得した後、私は(呼び出し側で設定されたデリゲート経由)、異なる言語の文字列比較演算子を取得するには、このような何かをするために使用:

IComparer<T> comparer = (IComparer<T>)StringComparer.Create(cultureInfo, caseInsensitive); 

ネットコア現在、StringComparer.CurrentCultureのようなプロパティを介して現在の文化に対してのみサポートしているようです。

特定の言語または文化の文字列比較ツールを取得する方法はありますか?

これは、複数の言語を同時に使用するアプリ(言語学習用のアプリなど)にとって重要です。 docsから

+0

GitHubでこの制限を報告することを検討してください。たぶんそれは単なる見落としであったかもしれません。そのように見える。 – usr

答えて

4

CurrentCultureプロパティのgetアクセサに

各呼び出しは次のコードが示すように、新しいStringComparerオブジェクトを返します。

だから、あなたはなど...他StringComparerつかむ、その後、次の所望の文化にThread.CurrentThread.CurrentCultureを設定し、その後、StringComparer.CurrentCultureを使用して、その文化のためのStringComparerをつかむ、その後、必要な文化へThread.CurrentThread.CurrentCultureを設定することができ

1

StringComparer.Createが.NET Standard 2.0に追加されましたので、今すぐ使用できます。

ただし、以前のバージョンをターゲットにしたい場合は、.NET Standard 1.0で次のように動作します。これは、CompareInfo(利用可能です)をIComparer<string>インターフェイスを実装するクラスにカプセル化することによって、同じ機能を提供します。

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); 
    } 
} 
関連する問題