国家/地区名称为ISO 3166-2代码

我知道如何使用RegionInfo将ISO 3166-2代码转换为完整的英文名称,例如“US”到“United States”。

但是,我怎么能做相反的事情,即拿“美国”并返回“美国”?

 //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); 

主要思想:获取所有区域对象并从中选择一个包含给定全名的对象。

 var regionFullNames = CultureInfo .GetCultures( CultureTypes.SpecificCultures ) .Select( x => new RegionInfo(x.LCID) ) ; var twoLetterName = regionFullNames.FirstOrDefault( region => region.EnglishName.Contains("United States") ); 
  ///  /// English Name for country ///  ///  ///  /// Returns: RegionInfo object for successful find. /// Returns: Null if object is not found. ///  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; } 

你可以做这样的事情:

 class CountryCodeMap { private static Dictionary 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 ; } }