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,稍后我可以从中获取等电流符号)