C# 查找货币符号的较短linq查询?
我被要求找出C# 查找货币符号的较短linq查询?,c#,.net,linq,C#,.net,Linq,我被要求找出USD(etc)有什么货币符号。($) 另一个例子: ILS=>₪ 所以我写了这个: var isoCurrency = "ILS".ToUpper().Trim(); foreach(CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { RegionInfo myRI1 = new RegionInfo(ci.LCID); if(myRI1.ISOCurre
USD
(etc)有什么货币符号。($
)
另一个例子:
ILS
=>₪
所以我写了这个:
var isoCurrency = "ILS".ToUpper().Trim();
foreach(CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
RegionInfo myRI1 = new RegionInfo(ci.LCID);
if(myRI1.ISOCurrencySymbol == isoCurrency)
{
NumberFormatInfo nfi = ci.NumberFormat;
console.Write( nfi);
}
}
但它看起来很丑
因此我将其转换为linq:
var t= CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(d=>new RegionInfo(d.LCID))
.Where (f=>f.ISOCurrencySymbol=="ILS" )
.Select(f=>f.CurrencySymbol).First();
但我相信我可以把它缩短。(2个选择?)
有什么帮助吗?(假设这是正确的解决方案……您的第一次
选择似乎是多余的。通常应先过滤(使用Where
),然后选择
编辑:Doh-我错过了newregioninfo()
。那么:
var ccy = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.First(ri => ri.ISOCurrencySymbol == "ILS").CurrencySymbol;
假设您知道正在处理有效的ISOCurrencySymbol
。如果您不能做出这样的假设,那么在访问CurrencySymbol
之前,先使用FirstOrDefault
并检查null
的结果
另外需要注意的一点是,如果您经常执行此查询,您可以缓存CultureInfo.GetCultures(CultureTypes.SpecificCultures))
的结果,尽管这确实是一个微观优化。您的第一次选择似乎是多余的。通常应先过滤(使用Where
),然后选择
编辑:Doh-我错过了newregioninfo()
。那么:
var ccy = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(c => new RegionInfo(c.LCID))
.First(ri => ri.ISOCurrencySymbol == "ILS").CurrencySymbol;
假设您知道正在处理有效的ISOCurrencySymbol
。如果您不能做出这样的假设,那么在访问CurrencySymbol
之前,先使用FirstOrDefault
并检查null
的结果
另外需要注意的一点是,如果您经常执行此查询,您可以缓存CultureInfo.GetCultures(CultureTypes.SpecificCultures))
的结果,尽管这实际上是一个微观优化。您可以使用重载方法来接受谓词(将Where
和首先组合在一起)
此代码与您的代码完全相同。但实际上,您应该使用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
您可以使用接受谓词的重载方法(将Where
和First
组合起来)
此代码与您的代码完全相同。但实际上,您应该使用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;
这应该做到:
var t = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Select(d => new RegionInfo(d.LCID))
.First(f => f.ISOCurrencySymbol == "ILS").CurrencySymbol;
我需要RegionInfo。。。。它产生了f,稍后我可以从中获取等电流符号)我需要RegionInfo。。。。它产生f,稍后我可以从中获取等电流符号)