我希望能够通过执行以下操作获得RegionInfo
:
new RegionInfo("United Kingdom");
但这引发了一个异常,并表示无法识别。
此page on RegionInfo表示如果“名称不是有效的国家/地区名称”,则会引发异常。
然而,此page指定了该类使用且包含United Kingdom
的预定义区域列表,那么为什么不创建具有国家/地区名称的新RegionInfo
?
答案 0 :(得分:30)
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 :(得分:3)
您链接的同一页也说:
RegionInfo名称是ISO 3166中定义的双字母代码之一 对于国家/地区。案件并不重要;然而,名字, TwoLetterISORegionName和ThreeLetterISORegionName属性 以大写形式返回相应的代码。
代码在页面上,GB
似乎是英国的2个字母代码(代码顺序难以搜索!)。所以试试这个:
new RegionInfo("GB");
或者,如果您使用的是.NET 2.0+,建议您使用完整的文化名称:
new RegionInfo("en-GB");
答案 2 :(得分:2)
来自 MSDN ;
包含ISO 3166中定义的双字母代码的字符串 国家/地区。
UNITED KINGDOM
在ISO网站的Country names and code elements上看起来不错。
GB英国
试试;
new RegionInfo("GB");
答案 3 :(得分:1)
如果我导航到构造函数,我在Visual Studio中看到的摘要说:
名称:包含ISO 3166中定义的双字母代码的字符串 country / region.-或 - 包含a的区域性名称的字符串 特定文化,自定义文化或仅限Windows的文化。 如果 您的应用程序应该是文化名称不是RFC 4646格式 指定整个文化名称而不仅仅是国家 / region。
整个文化名称为'en-GB'。
或者您可以使用'GB'
答案 4 :(得分:0)
查看MSDN页面:
A string containing one of the two-letter codes defined in ISO 3166 for country/region.
您需要英国的ISO 3166代码,而不是国家名称。
这里是code you need。
答案 5 :(得分: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.