国家代码列表 - C#

Tej*_*udi 11 c# country-codes internationalization

我有一个字符串,我需要验证它是否是国家代码.文化是德国人.我是否可以通过任何方法调用德国文化中的国家/地区代码列表,而无需自行键入所有274(?)代码?

谢谢,Teja.

Ost*_*mar 14

当您说"国家代码"时,我认为您的意思是ISO 3166中的双字母代码.然后,您可以使用RegionInfo构造函数来检查您的字符串是否是正确的代码.

string countryCode = "de";
try {
    RegionInfo info = new RegionInfo(countryCode);
}
catch (ArgumentException argEx)
{
    // The code was not a valid country code
}
Run Code Online (Sandbox Code Playgroud)

您也可以在问题中说明它是否是德语有效的国家/地区代码.然后,您只需将特定的文化名称与国家/地区代码一起传递.

string language = "de";
string countryCode = "de";
try {
    RegionInfo info = new RegionInfo(string.Format("{0}-{1}", language, countryCode));
}
catch (ArgumentException argEx)
{
    // The code was not a valid country code for the specified language
}
Run Code Online (Sandbox Code Playgroud)

  • RegionInfo 不完全符合 ISO 3166。这个列表有一些例外,例如 Cyprys (CY) 在 ISO 3166 列表中,但不被 RegionInfo 识别。 (3认同)

Kja*_*a30 5

可接受的答案是滥用ArgumentException构造函数引发的错误。您并没有真正使用RegionInfoArgumentException实例,这使得代码的用途非常不清楚。

相反,获取所有特定区域性的列表,然后搜索这些区域性的区域,以在您的ISO 3166 alpha-2代码上找到匹配项:

bool IsCountryCodeValid(string countryCode)
{
    return CultureInfo
        .GetCultures(CultureTypes.SpecificCultures)
            .Select(culture => new RegionInfo(culture.LCID))
                .Any(region => region.TwoLetterISORegionName == countryCode);
}
Run Code Online (Sandbox Code Playgroud)

或专门针对您的问题:

bool IsValidGermanCountryCode(string countryCode)
{
    return CultureInfo
        .GetCultures(CultureTypes.SpecificCultures)
            .Where(culture => culture.TwoLetterISOLanguageName == "de")
                .Select(culture => new RegionInfo(culture.LCID))
                    .Any(region => region.TwoLetterISORegionName == countryCode);
}
Run Code Online (Sandbox Code Playgroud)