我最初的想法是,在没有上下文的情况下将货币符号传递给这种方法意味着它可能是一个有效的符号,但不一定是正确的——例如,许多地区使用“$”符号。
如果我仍然这样做,我可能会循环特定的 .NET 文化(避免使用 Invariant Culture,如果您使用的是 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;
}
这假设您只传递符号,并没有解决不同符号的变体使用。无论如何,希望这能让你思考。