13

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

new RegionInfo("United Kingdom");

但这会引发异常并表示无法识别。

RegionInfo 上的此页面说,如果“名称不是有效的国家/地区名称”,则会引发异常。

然而,这个页面指定了一个预定义区域列表,这些区域由包含 和 的类使用United Kingdom,那么为什么创建一个RegionInfo带有国家名称的新区域不起作用呢?

4

6 回答 6

33
  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上面的过滤器。这也使您能够填充诸如组合框之类的东西。

于 2013-01-10T16:14:16.047 回答
3

您链接的同一页面还说:

RegionInfo 名称是 ISO 3166 中为国家/地区定义的两个字母代码之一。案例不重要;但是,Name、TwoLetterISORegionName 和 ThreeLetterISORegionName 属性以大写形式返回相应的代码。

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

new RegionInfo("GB");

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

new RegionInfo("en-GB");
于 2013-01-10T16:06:05.667 回答
2

来自MSDN

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

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

GB 英国

试试看;

new RegionInfo("GB");
于 2013-01-10T16:06:34.233 回答
1

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

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

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

或者你可以使用“GB”

于 2013-01-10T16:09:44.817 回答
0

查看 MSDN 页面:

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

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

这是您需要的代码

于 2013-01-10T16:05:54.420 回答
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.
于 2013-01-10T16:09:05.893 回答