3 に答える
Your first Select
seems redundant. You should generally filter first (using Where
) then Select
.
EDIT: Doh - I missed the new RegionInfo()
. What about:
var ccy = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.First(ri => ri.ISOCurrencySymbol == "ILS").CurrencySymbol;
That assumes you know you are dealing with a valid ISOCurrencySymbol
. If you can't make that assumption then use FirstOrDefault
and check the result for null
first before accessing the CurrencySymbol
.
One additional point to note is that if you are performing this query frequently you could cache the result of CultureInfo.GetCultures(CultureTypes.SpecificCultures))
, although this really is a micro optimisation.
述語を受け入れるオーバーロードされたFirstWhere
メソッドを使用できます( andを結合するためFirst
)
CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.First(r => r.ISOCurrencySymbol == "ILS")
.CurrencySymbol;
このコードは、コードが行うこととまったく同じことを行います。しかし実際にはFirstOrDefault
、ISO 通貨記号の地域を使用して取得しようとする必要があります。リージョンが見つかった場合は、それを使用します。
var isoCurrency = "ILS"
var region = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.FirstOrDefault(r => r.ISOCurrencySymbol == isoCurrency);
if (region != null)
// get region.CurrencySymbol
これはそれを行う必要があります:
var t = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(d => new RegionInfo(d.LCID))
.First(f => f.ISOCurrencySymbol == "ILS").CurrencySymbol;