Country name to ISO 3166-2 code

烈酒焚心 提交于 2019-12-05 06:48:49
//Get the cultureinfo
RegionInfo rInfo = new RegionInfo("us");
string s = rInfo.EnglishName;

//Convert it back
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
 CultureInfo cInfo = cultures.FirstOrDefault(culture => new RegionInfo(culture.LCID).EnglishName == s);
yesenin

The main idea: take all region objects and select from them one which contains given full name.

var regionFullNames = CultureInfo
                      .GetCultures( CultureTypes.SpecificCultures )
                      .Select( x => new RegionInfo(x.LCID) )
                      ;
var twoLetterName = regionFullNames.FirstOrDefault(
                       region => region.EnglishName.Contains("United States")
                    );
        /// <summary>
        /// English Name for country
        /// </summary>
        /// <param name="countryEnglishName"></param>
        /// <returns>
        /// Returns: RegionInfo object for successful find.
        /// Returns: Null if object is not found.
        /// </returns>
        static RegionInfo getRegionInfo (string countryEnglishName)
        {
            //Note: This is computed every time. This may be optimized
            var regionInfos = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
               .Select(c => new RegionInfo(c.LCID))
               .Distinct()
               .ToList();
             RegionInfo r = regionInfos.Find(
                    region => region.EnglishName.ToLower().Equals(countryEnglishName.ToLower()));                       
             return r;
        }

You could just do something like this:

class CountryCodeMap
{
  private static Dictionary<string,string> map =
    CultureInfo
    .GetCultures(CultureTypes.AllCultures)
    .Where( ci => ci.ThreeLetterISOLanguageName != "ivl" )
    .Where( ci => !ci.IsNeutralCulture )
    .Select( ci => new RegionInfo(ci.LCID) )
    .Distinct()
    .ToDictionary( r => r.Name , r => r.EnglishName )
    ;

  public static string GetCountryName( string isoCountryCode )
  {
    string countryName ;
    bool found = map.TryGetValue( isoCountryCode, out countryName ) ;

    if ( !found ) throw new ArgumentOutOfRangeException("isoCountryCode") ;

    return countryName ;
  }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!