私の最初の考えは、コンテキストなしでそのようなメソッドに通貨記号を渡すことは、それが有効な記号である可能性があることを意味しますが、必ずしも正しい記号であるとは限りません。たとえば、多くの地域では「$」記号が使用されます。
とにかくこれを行っている場合は、特定の.NETカルチャをループして(Windows 7を使用している場合は、不変カルチャを回避して)、渡された文字列に対して各RegionInfoのCurrencySymbolプロパティをチェックします。そしてテストされていない)それがまだ私の頭の中にある間; これはより効率的にコーディングできると確信しています。
public static Boolean IsValidCurrency(this string value)
{
// Assume the worst.
Boolean isValid = false;
foreach (CultureInfo c in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
// Account for InvariantCulture weirdness in Windows 7.
if (!c.Equals(CultureInfo.InvariantCulture))
{
RegionInfo r = new RegionInfo(c.LCID);
if (r.CurrencySymbol.Equals(value, StringComparison.OrdinalIgnoreCase))
{
// We've got a match, so flag it and break.
isValid = true;
break;
}
}
}
return isValid;
}
これは、シンボルを渡すだけであり、さまざまなシンボルのさまざまな使用法を解決しないことを前提としています。とにかく、これがあなたに考えさせてくれることを願っています。