我知道如何将ISO 3166-2代码转换成英文全名。使用RegionInfo将"US“改为"United States”。
然而,我如何才能做相反的事情,即拿“美国”而回“美国”呢?
发布于 2014-12-24 00:30:45
//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);发布于 2014-12-24 00:20:54
主要思想:取所有区域对象,并从中选择一个包含给定全名的区域对象。
var regionFullNames = CultureInfo
.GetCultures( CultureTypes.SpecificCultures )
.Select( x => new RegionInfo(x.LCID) )
;
var twoLetterName = regionFullNames.FirstOrDefault(
region => region.EnglishName.Contains("United States")
);发布于 2014-12-24 01:45:31
你可以这样做:
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 ;
}
}https://stackoverflow.com/questions/27629880
复制相似问题