按国家名称获取RegionInfo?(Get RegionInfo by country name?

2019-07-18 02:21发布

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

new RegionInfo("United Kingdom");

但是这将引发异常,并说,它无法识别。

这对RegionInfo页说,如果“名称不是一个有效的国家/地区名称”抛出一个异常。

然而此页面指定由类的预定义的地区列表,包含United Kingdom ,为什么不创建一个新RegionInfo与国名工作?

Answer 1:

  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如上。 这使您可以填充的东西,如组合框太多的能力。



Answer 2:

你也与同一页说:

该RegionInfo名字是在ISO 3166中定义的国家/地区的双字母代码之一。 情况并不显著; 然而,名称,TwoLetterISORegionName和ThreeLetterISORegionName性质以大写字母返回相应的代码。

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

new RegionInfo("GB");

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

new RegionInfo("en-GB");


Answer 3:

MSDN;

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

UNITED KINGDOM看起来就ok了国家名称和代码元素的ISO网站上。

gb英国

试着用;

new RegionInfo("GB");


Answer 4:

如果我浏览到我的构造函数在Visual Studio中看到了总结说:

名称 :包含在ISO 3166中定义的国家/ region.-或-A包含文化名特定文化,风俗文化,或仅Windows文化字符串中的双字母代码的字符串。 如果文化名不是RFC 4646格式 ,应用程序应指定整个文化名,而不仅仅是国家 /地区。

整个文化名称为“EN-GB”。

或者你可以使用“GB”



Answer 5:

看MSDN页面:

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

您需要为英国ISO 3166的代码,该国没有名字。

下面是你需要的代码 。



Answer 6:

注意从元数据为参数此评论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.


文章来源: Get RegionInfo by country name?