为什么不在CultureInfo.GetCultures()中展示所有国家/地区?

sas*_*eve 14 .net c# cultureinfo

我使用此标准代码填充国家/地区列表:

static void Main(string[] args)
{
    List cultureList = new List();

    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);

    foreach (CultureInfo culture in cultures)
    {
        try
        {
            RegionInfo region = new RegionInfo(culture.LCID);

            if (!(cultureList.Contains(region.EnglishName)))
            {
                cultureList.Add(region.EnglishName);
                Console.WriteLine(region.EnglishName);
            }
        }
        catch (ArgumentException ex) 
        {
            // just ignore this
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到一些国家被遗漏了.只是想知道这种情况的原因是什么?

Yve*_* M. 8

答案是:按设计

CultureInfo.GetCultures不是设计成可以在世界上所有的文化的完整和明确的清单.它只是为了让您了解可以在计算机上找到的文化.

CultureInfo文档说:

请记住,文化名称和标识符仅代表可在特定计算机上找到的文化的子集.Windows版本或Service Pack可以更改可用的文化.应用程序使用CultureAndRegionInfoBuilder类添加自定义文化.用户使用Microsoft Locale Builder工具添加自己的自定义文化.Microsoft Locale Builder使用CultureAndRegionInfoBuilder类以托管代码编写.


笔记

MSDN上可能有用的链接:

顺便说一句,您可以使用简单的LINQ'命令'缩短代码:

var regionInfos = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
  .Select(c => new RegionInfo(c.LCID))
  .Distinct()
  .ToList();
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 2

您没有获得所有文化:

CultureTypes.AllCultures & ~CultureTypes.NeutralCultures
Run Code Online (Sandbox Code Playgroud)