我希望能够RegionInfo
通过执行以下操作来获得:
new RegionInfo("United Kingdom");
但这会引发异常并表示无法识别。
RegionInfo 上的此页面说,如果“名称不是有效的国家/地区名称”,则会引发异常。
然而,这个页面指定了一个预定义区域列表,这些区域由包含 和 的类使用United Kingdom
,那么为什么创建一个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 中为国家/地区定义的两个字母代码之一。案例不重要;但是,Name、TwoLetterISORegionName 和 ThreeLetterISORegionName 属性以大写形式返回相应的代码。
代码在页面上,GB
似乎是英国的 2 个字母代码(按代码顺序很难搜索!)。所以试试这个:
new RegionInfo("GB");
或者,如果您使用的是 .NET 2.0+,建议您使用完整的文化名称:
new RegionInfo("en-GB");
来自MSDN;
包含在 ISO 3166 中为国家/地区定义的两个字母代码的字符串。
UNITED KINGDOM
ISO 网站上的国家名称和代码元素看起来不错。
GB 英国
试试看;
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.