0

国名のリスト、それぞれの 2 文字のコードと 3 文字のコードの入力を手伝ってください。以下のスニペットを試しましたが、不完全な結果が得られました。

 static void Main(string[] args)
    {
        List<string> list = new List<string>();
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))
        {
            try
            {
                RegionInfo myRI1 = new RegionInfo(ci.LCID);
                list.Add(String.Format("{0,-12}{1,-12}{2}", myRI1.TwoLetterISORegionName, myRI1.EnglishName, myRI1.ThreeLetterISORegionName));
            }
            catch { }
       }

    list.Sort();  // sort by name
        // write to console
    foreach (string str in list)
        Console.WriteLine(str);

    Console.WriteLine("Total Countries" + list.Count.ToString());
    Console.ReadKey();
    }
}
4

1 に答える 1

2

C# を使用してこの情報を取得する必要がある場合は、次のようにします。

var regions = CultureInfo.GetCultures(CultureTypes.AllCultures)
    .Where(c => !c.IsNeutralCulture && c.LCID != 0x7f)
    .Select(c => new RegionInfo(c.LCID))
    .GroupBy(r => r.TwoLetterISORegionName) // This is an alternative to using Distinct
    .Select(g => g.First())                 // It's probably not very efficient, but the list is so small anyway.
    .OrderBy(r => r.TwoLetterISORegionName)
    .ToList();

(LCID 0x7f のカルチャは でありInvariantCulture、RegionInfo が関連付けられていません。)

これにより、私のコンピューターには 127 か国しか表示されません。CultureInfos同じ を共有するmultiple のインスタンスが多数あるため、メソッドはより多くの結果をもたらしますRegionInfo。たとえば、スペインCultureInfosを指す 4 つの異なるものがあります: (カタロニア語)、(バスク語)、(ガリシア語)、および(スペイン語)。これは、が主に言語に関係しており、言語と地域が一致する必要がないためです。RegionInfoca-ESeu-ESgl-ESes-ESCultureInfo

世界には127以上の国があります。CultureInfo問題は、 andを使用してこれにアプローチするRegionInfoと、コンピューターがたまたま知っている国についてしか知ることができず、完全なリストになる可能性が低いことです。しかも、その名のRegionInfo通り、必ずしも国や国家であるとは限りません。たとえば、RegionInfo私のコンピューターのエントリの 1 つは "Caribbean" で、TwoLetterISORegionName は029(かなり奇妙だと認めざるを得ません) です。カリブ海は明らかに国ではありません。

問題を解決するためのより良い方法は、ここなどの他の場所で国のリストを検索し、それらをプログラムのどこかにあるテーブルに保存することです。

于 2013-07-30T13:24:09.587 に答える