按国家名称获取RegionInfo
本文关键字:获取 RegionInfo 国家 | 更新日期: 2023-09-27 17:52:13
我希望能够通过以下操作获得RegionInfo
:
new RegionInfo("United Kingdom");
,但这会抛出一个异常,说它不被识别。
这一页关于RegionInfo说如果'name不是一个有效的国家/地区名称'将抛出一个异常。
但是这个页面指定了类使用的预定义区域列表,并且包含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中定义的两个字母代码之一国家/地区。病例不显著;然而,这个名字,这个TwoLetterISORegionName和ThreeLetterISORegionName属性返回相应的大写代码
代码在页面上,GB
似乎是英国的2个字母代码(它的代码顺序是难以搜索!)。所以试试这个:
new RegionInfo("GB");
或者如果你使用的是。net 2.0+,建议你使用完整的区域性名称:
new RegionInfo("en-GB");
From MSDN;
包含ISO 3166中定义的两个字母代码的字符串国家/地区。
UNITED KINGDOM
在ISO网站上的国家名称和代码元素上看起来不错。
GB UNITED KINGDOM
尝试;
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.