按国家/地区名称获取RegionInfo?

时间:2013-01-10 16:01:37

标签: c# regions regioninfo

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

new RegionInfo("United Kingdom");

但这引发了一个异常,并表示无法识别。

page on RegionInfo表示如果“名称不是有效的国家/地区名称”,则会引发异常。

然而,此page指定了该类使用且包含United Kingdom的预定义区域列表,那么为什么不创建具有国家/地区名称的新RegionInfo

6 个答案:

答案 0 :(得分:30)

  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进行过滤,如上所述。这使您能够填充组合框等内容。

答案 1 :(得分:3)

您链接的同一页也说:

  

RegionInfo名称是ISO 3166中定义的双字母代码之一   对于国家/地区。案件并不重要;然而,名字,   TwoLetterISORegionName和ThreeLetterISORegionName属性   以大写形式返回相应的代码。

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

new RegionInfo("GB");

或者,如果您使用的是.NET 2.0+,建议您使用完整的文化名称:

new RegionInfo("en-GB");

答案 2 :(得分:2)

来自 MSDN ;

  

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

UNITED KINGDOM在ISO网站的Country names and code elements上看起来不错。

  

GB英国

试试;

new RegionInfo("GB");

答案 3 :(得分:1)

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

  

名称:包含ISO 3166中定义的双字母代码的字符串   country / region.-或 - 包含a的区域性名称的字符串   特定文化,自定义文化或仅限Windows的文化。 如果   您的应用程序应该是文化名称不是RFC 4646格式   指定整个文化名称而不仅仅是国家 / region。

整个文化名称为'en-GB'。

或者您可以使用'GB'

答案 4 :(得分:0)

查看MSDN页面:

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

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

这里是code you need

答案 5 :(得分:0)

请注意参数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.