通过国家名称获取RegionInfo?

14

我想通过以下方式获取RegionInfo:

new RegionInfo("United Kingdom");

但是这会抛出一个异常,表示它不能被识别。

这个RegionInfo页面上说,如果“name不是有效的国家/地区名称”,就会抛出异常。

然而,这个页面列出了类使用的预定义区域列表,并包含英国,那么为什么使用国家名称创建新的RegionInfo不能正常工作?


5
请认真阅读文档:RegionInfo名称是ISO 3166中定义的国家/地区的两位字母代码之一。 - Roberto Conte Rosito
6个回答

34
  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
但是它将会是 null,因为 EnglishName 是 "English (United Kingdom)" ;-)所以你可能想要使用 FirstOrdefault(r => r.EnglishName.Contains(name)) - Tim Schmelter
@LukeHennerley:它仍将是null,但现在没有异常了。无论如何+1,因为使用Contains而不是==太慷慨了。 - Tim Schmelter
它对我有效,EnglishName 显示为“英国”。 - DevDave
@Tyler 我也以为会起作用,但在MSDN上GB的英文名称只是United Kingdom - LukeHennerley

3
您链接的同一页还提到:
区域信息名称是ISO 3166中为国家/地区定义的两个字母代码之一。大小写不敏感; 然而,Name、TwoLetterISORegionName和ThreeLetterISORegionName属性以大写形式返回适当的代码。这些代码在该页面上,GB似乎是英国的2位代码(按代码顺序排列使搜索困难!)。所以请尝试这个:
new RegionInfo("GB");

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

new RegionInfo("en-GB");

原帖作者链接了旧版本的规范。自.NET 2.0以来,建议使用例如“"en-GB"”而不是仅使用“GB”。 - Jeppe Stig Nielsen
1
太好了。GB 的其他可能性包括:威尔士语(英国)"cy-GB" 和苏格兰盖尔语(英国)"gd-GB"。 - Jeppe Stig Nielsen

2

来自MSDN;

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

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

GB UNITED KINGDOM

尝试一下;

new RegionInfo("GB");

原帖链接了一个旧版本的规范。自 .NET 2.0 起,建议使用例如 "en-GB" 而不是仅使用 "GB" - Jeppe Stig Nielsen

1

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

名称:一个包含ISO 3166中定义的两个字母代码的字符串,用于表示国家/地区。-或者-一个包含特定文化、自定义文化或仅适用于Windows的文化名称的字符串。如果文化名称不符合RFC 4646格式,则您的应用程序应该指定整个文化名称而不仅仅是国家/地区。

整个文化名称将是'en-GB'。

或者您可以使用'GB'


与原始问题链接相比,文档页面有更新版本。明确建议使用完整的特定文化,例如"en-GB",而不仅仅是"GB"。我们不知道原帖发布者使用的框架版本,但他应该肯定选择new RegionInfo("en-GB") - Jeppe Stig Nielsen

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.

0
看一下MSDN页面:
一个包含ISO 3166定义的两个字母代码之一的字符串,用于表示国家/地区。
你需要英国的ISO 3166代码,而不是国家名称。
这里是你需要的代码

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