我想通过以下方式获取RegionInfo
:
new RegionInfo("United Kingdom");
但是这会抛出一个异常,表示它不能被识别。
这个RegionInfo页面上说,如果“name不是有效的国家/地区名称”,就会抛出异常。
然而,这个页面列出了类使用的预定义区域列表,并包含英国
,那么为什么使用国家名称创建新的RegionInfo
不能正常工作?
我想通过以下方式获取RegionInfo
:
new RegionInfo("United Kingdom");
但是这会抛出一个异常,表示它不能被识别。
这个RegionInfo页面上说,如果“name不是有效的国家/地区名称”,就会抛出异常。
然而,这个页面列出了类使用的预定义区域列表,并包含英国
,那么为什么使用国家名称创建新的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
进行筛选。这使您能够填充诸如组合框之类的内容。EnglishName
是 "English (United Kingdom)" ;-)所以你可能想要使用 FirstOrdefault(r => r.EnglishName.Contains(name))
。 - Tim Schmelternull
,但现在没有异常了。无论如何+1,因为使用Contains
而不是==
太慷慨了。 - Tim SchmelterGB
的英文名称只是United Kingdom
。 - LukeHennerleynew RegionInfo("GB");
如果您正在使用.NET 2.0+,建议您使用完整的文化名称:
new RegionInfo("en-GB");
来自MSDN;
一个包含 ISO 3166 中定义的两个字母代码的字符串,表示国家/地区。
UNITED KINGDOM
在 ISO 网站上的国家名称和代码元素看起来很好。
GB UNITED KINGDOM
尝试一下;
new RegionInfo("GB");
"en-GB"
而不是仅使用 "GB"
。 - Jeppe Stig Nielsen如果我导航到构造函数,我在Visual Studio中看到的摘要如下:
名称:一个包含ISO 3166中定义的两个字母代码的字符串,用于表示国家/地区。-或者-一个包含特定文化、自定义文化或仅适用于Windows的文化名称的字符串。如果文化名称不符合RFC 4646格式,则您的应用程序应该指定整个文化名称而不仅仅是国家/地区。
整个文化名称将是'en-GB'。
或者您可以使用'GB'
"en-GB"
,而不仅仅是"GB"
。我们不知道原帖发布者使用的框架版本,但他应该肯定选择new RegionInfo("en-GB")
。 - Jeppe Stig Nielsenname
的元数据中的注释,该注释解释了从.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.