按国家名称获取RegionInfo

本文关键字:获取 RegionInfo 国家 | 更新日期: 2023-09-27 17:52:13

我希望能够通过以下操作获得RegionInfo:

new RegionInfo("United Kingdom");

,但这会抛出一个异常,说它不被识别。

这一页关于RegionInfo说如果'name不是一个有效的国家/地区名称'将抛出一个异常。

但是这个页面指定了类使用的预定义区域列表,并且包含United Kingdom,那么为什么不能用国家名称创建一个新的RegionInfo呢?

按国家名称获取RegionInfo

  var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID));
  var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(name));

如果您想通过国家名称获得RegionInfo,您可以获得IEnumerable<RegionInfo>,然后根据上述EnglishName进行过滤。这也使您能够填充诸如组合框之类的东西。

你链接的那个页面还写着:

RegionInfo名称是ISO 3166中定义的两个字母代码之一国家/地区。病例不显著;然而,这个名字,这个TwoLetterISORegionName和ThreeLetterISORegionName属性返回相应的大写代码

代码在页面上,GB似乎是英国的2个字母代码(它的代码顺序是难以搜索!)。所以试试这个:

new RegionInfo("GB");

或者如果你使用的是。net 2.0+,建议你使用完整的区域性名称:

new RegionInfo("en-GB");

From MSDN;

包含ISO 3166中定义的两个字母代码的字符串国家/地区。

UNITED KINGDOM在ISO网站上的国家名称和代码元素上看起来不错。

GB UNITED KINGDOM

尝试;

new RegionInfo("GB");

如果我导航到构造函数我在Visual Studio中看到的摘要显示:

name:包含ISO 3166中定义的两个字母代码的字符串国家/地区。的区域性名称的字符串特定文化、自定义文化或仅windows文化。如果区域性名称不是RFC 4646格式,您的应用程序应该指定整个文化名称,而不仅仅是国家/地区。

整个区域性名称将为'en-GB'。

或者你可以用'GB'

查看MSDN页面:

A string containing one of the two-letter codes defined in ISO 3166 for country/region.

您需要的是英国的ISO 3166代码,而不是国家名称。

请注意元数据中name参数的注释,它解释了从。net Framework 2.0到

的变化:
    //     A string containing one of the two-letter codes defined in ISO 3166 for country/region.-or-Beginning
    //     in .NET Framework version 2.0, a string containing the culture name for a
    //     specific culture, custom culture, or Windows-only culture. If the culture
    //     name is not in RFC 4646 format, your application should specify the entire
    //     culture name, not just the country/region.