使用LINQ从RegionInfo获取CultureInfo

7

我希望你能帮我,因为这让我发疯了,我无法确定自己是否在做一些愚蠢的事情。

我正在尝试收集所有特定文化并获取它们对应的RegionInfo。从该列表中,我正在尝试通过LINQ获取与参数提供的国家对应的地区。如下所示:

public RegionInfo getregion(string country)
{
    RegionInfo thisregion;
    List<RegionInfo> regions = new List<RegionInfo>();
    CultureInfo[] allregions = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
    regions.AddRange(allregions.Where(x => !x.IsNeutralCulture).Select(x => new RegionInfo(x.LCID)));
    thisregion = regions.FirstOrDefault(region => region.EnglishName == country);
    return thisregion;
}

这个特定的函数在Select()语句期间一直抛出异常,错误如下;
附加信息:文化ID 4096(0x1000)是中性文化;无法从中创建区域。
引起问题的文化是aa-ER。正如您所看到的,我已根据IsNeutralCulture布尔值过滤了列表,因此 .NET Framework认为这种文化不是中性的,但错误却表示相反。
我做了什么蠢事吗?
编辑:有趣的是,第一条评论让我在另一台机器上测试它,同样的文化没有抛出错误。看起来像是机器的问题。

1
我在我的机器上执行了你的代码,一切正常... 请问你使用的是哪个“国家”?虽然不应该有关系,但最好测试一下。 - Gilad Green
我也可以工作。但是我注意到在所有地区中我没有aa-ER。所有地区的计数为248。 - user6638270
1
有趣的是,第一条评论让我在另一台机器上测试它,在相同的文化环境下没有出现错误。看起来是机器的问题。 - Ryan Hargreaves
@RyanHargreaves 你检查了操作系统版本吗?它们是相同的吗? - Panagiotis Kanavos
@PanagiotisKanavos 是的,Windows 10都可以。 - Ryan Hargreaves
显示剩余2条评论
1个回答

10

好的,为了解决这个问题,我将Select语句更改为使用x.Name初始化RegionInfo而不是x.LCID,这样就解决了问题。不知道为什么LCID会失败,但这个解决方案可以解决问题。


我曾经遇到过类似的问题。有时候同样的代码会抛出错误,而有时候又不会(在同一台机器上)。这个问题已经在 .Net 中得到了解决:https://github.com/dotnet/runtime/issues/64893在我的情况下,使用 x.Name 修复了问题。 - CoperNick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接