0

これがList< string > lstAです。

lstAには次のような値 (データ型string ) が含まれる場合があります: 1 番目の例

1

1.00

1000.01

1,002.98

.........

または、listAに次のような値が含まれる場合があります: 2 番目の例

1

1,00

1000,01

1.002,98

.........

このリストをメソッドに渡そうとすると、文字列「german」または「us」が返されます

私はこれを試しています:

private static string ReturnCulture(List<string> lst)
    {
        string cull = "";
        foreach (string s in lst)
        {
            if (s.Contains(".") && s.Contains(","))
            {
                cull = "german";
                break;
            }
            else if (!s.Contains(".") && s.Contains(","))
            {
                cull = "german";
            }
            else if (s.Contains(".") && !s.Contains(","))
            {
                cull = "us";
                break;
            }
            else if (!s.Contains(".") && !s.Contains(","))
            {
                continue;
            }
        }

        return cull;
    }

これは、最初の 3 つの値に関しては正常に機能します。しかし、( 1,002.98 ) または ("1.002,98") を取得すると、これは両方ともドイツ語の状態でフルフィルになります。

これを解決するには?グローバル化クラスは、それがどの文化であるかを簡単に検出できますか? lstAの例は本当にランダムです。ただし、それは1 番目の例または2番目の例のいずれかになります。

4

3 に答える 3

0

文字列のセットが与えられたときに、文字列が英語またはドイツ語としてフォーマットされているかどうかを判断できるメソッドを明確に作成することはできません。すべての文字列を英語またはドイツ語として解析できるかどうかを通知するメソッドを作成できます。解析の失敗が予想されるため、次のようにDouble.TryParseを使用する必要があります。

private static bool AreAllStringsValidNumberRepresenationsForCulture(CultureInfo ci, List<string> lst)
{
    foreach (string s in lst)
    {
        double number;
        if (!Double.TryParse(s, NumberStyles.Any, ci, out number)
        {
            return false;
        }
    }
    return true;
}

ヒューリスティックに頼るのではなく、明示的な入力を取得する方が常に良いため、標準の数値表現を強制する方法があれば、より良いでしょう。

于 2013-03-25T16:53:35.083 に答える
0

いくつかのカルチャのみの数値を解析しようとしている場合は、カルチャ形式パラメーターを指定して double.parse を使用すると便利な場合があります。カルチャ形式での二重解析を参照してください

于 2013-03-25T13:49:39.230 に答える