少し強引で特にエレガントではありませんが、次のようにすることができます:
public bool TryGetCurrencySymbol(string ISOCurrencySymbol, out string symbol){ symbol =CultureInfo .GetCultures(CultureTypes.AllCultures) .Where(c => !c.IsNeutralCulture) .Select(culture => { try{ return new RegionInfo(culture.Name); } catch { return null; } }) .Where(ri => ri!=null &&ri.ISOCurrencySymbol ==ISOCurrencySymbol) .Select(ri => ri.CurrencySymbol) .FirstOrDefault();戻り記号 !=null;}
プレ>次のように使用します:
string currSymbol;if(TryGetCurrencySymbol("GBP",out currSymbol)){ Console.WriteLine("symbol is {0}", currSymbol);}
プレ>このメソッドを攻撃することが予想される場合は、事前にキャッシュを構築することをお勧めします:
public static class CurrencyTools{ private static IDictionary
map; static CurrencyTools() { map =CultureInfo .GetCultures(CultureTypes.AllCultures) .Where(c => !c.IsNeutralCulture) .Select(culture => { try{ return new RegionInfo(culture.Name); } catch { return null; } }) .Where(ri => ri!=null) .GroupBy(ri => ri.ISOCurrencySymbol) .ToDictionary(x => x.Key, x => x.First().CurrencySymbol); } public static bool TryGetCurrencySymbol( string ISOCurrencySymbol, out string symbol) { return map.TryGetValue(ISOCurrencySymbol, out symbol); }}コード> プレ> 執筆時点で、私のマシンなどでは、マップには次のマッピングが含まれています:
AED د.إ. AFN ؋ALL LekëAMD ÊANG NAf.AOA KzARS $AUD $AWG Afl.AZN ₼BAM КМBBD $BDT ৳BGN лв.BHD د.ب. BIF FBuBMD $BND $BOB BsBRL R$BSD $BTN Nu.BWP PBYN BrBZD $CAD $CDF FCCHF CHFCLP $CNY ¥COP $CRC ₡CUP $CVE CZK KčDJF FdjDKK kr.DOP $DZD د.just €FJD $FKP £GBP £GEL ₾GHS GH₵GIP £GMD DGNF FGGTQ QGYD $HKD $HNL LHRK knHTG GHUF FtIDR RpILS ₪INR ₹IQD د.ع. IRR ريالISK krJMD $JOD د.ا. JPY ¥KES KshKGS сомKHR ៛KMF CFKPW ₩KRW ₩KWD денMMK KMNT ₮MOP MOP $MRU MRUMUR RsMVR .MWK MKMXN $MYR RMMZN MTnNAD $NGN ₦NIO C$NOK krNPR रुNZD $OMR ر.ع. PAB B/.PEN S/PGK KPHP ₱PKR RsPLN złPYG ₲QAR ر.ق. RON leiRSD дин.RUB ₽RWF RFSAR ر.س. SBD $SCR SRSDG ج.س.SEK krSGD $SHP £SLL LeSOS SSRD $SSP £STN DbSYP ل.س. SZL ETHB ฿TJS смнTMT m.TND د.ت.トップ T$TRY ₺TTD $TWD NT$TZS TShUAH ₴UGX UShUS D $UYU $UZS сўмVES Bs.SVND ₫VUV VTWST WS$XAF FCFAXCD EC$XDR XDRXOF CFAXPF FCFPYER ر.ي. ZAR RZMW K
プレ>