2009-08-24 154 views
10

我有一個字符串,我需要驗證它是否是國家代碼。文化是德國人。是否有任何方法可以在德國文化中獲取國家代碼列表,而無需自己輸入所有274(?)代碼?國家代碼清單 - C#

謝謝, Teja。

回答

13

當你說「國家代碼」我想你指的是兩個字母的代碼作爲ISO 3166。然後你可以使用RegionInfo構造函數來檢查你的字符串是否是正確的代碼。

string countryCode = "de"; 
try { 
    RegionInfo info = new RegionInfo(countryCode); 
} 
catch (ArgumentException argEx) 
{ 
    // The code was not a valid country code 
} 

你也,當你在你的問題的狀態,檢查它是否是德語有效的國家代碼。然後,您只需將特定的文化名稱與國家代碼一起傳遞。

string language = "de"; 
string countryCode = "de"; 
try { 
    RegionInfo info = new RegionInfo(string.Format("{0}-{1}", language, countryCode)); 
} 
catch (ArgumentException argEx) 
{ 
    // The code was not a valid country code for the specified language 
} 
+0

事實證明,德國健康保險使用不同的命名國家系統。國家代碼大小從1-3個字符變化。感謝您的幫助! - Teja 0秒前 – 2009-08-24 20:55:35

+0

哇......真奇怪。如果只有三個字母,我會猜測它是ISO 3166-1 Alpha 3,國家代碼使用三個字母(德語爲DEU)。 – Ostemar 2009-08-24 21:00:21

+0

這很奇怪; ISO 3166國家代碼是大寫。 – rds 2012-10-30 09:38:26

3

接受的答案是濫用了構造函數拋出的ArgumentException。你並沒有真正使用RegionInfoArgumentException實例,這使得代碼的目的很不明確。

取而代之的是,讓所有特定文化的列表,然後通過搜索這些文化的地區找到你的ISO 3166的α-2碼匹配:

bool IsCountryCodeValid(string countryCode) 
{ 
    return CultureInfo 
     .GetCultures(CultureTypes.SpecificCultures) 
      .Select(culture => new RegionInfo(culture.LCID)) 
       .Any(region => region.TwoLetterISORegionName == countryCode); 
} 

或者具體而言,對於您的問題:

bool IsValidGermanCountryCode(string countryCode) 
{ 
    return CultureInfo 
     .GetCultures(CultureTypes.SpecificCultures) 
      .Where(culture => culture.TwoLetterISOLanguageName == "de") 
       .Select(culture => new RegionInfo(culture.LCID)) 
        .Any(region => region.TwoLetterISORegionName == countryCode); 
} 
+0

顯然這使用LINQ。 – Kjata30 2015-01-28 22:56:35

1

使用RegionInfo檢查有效的ISO代碼時要小心。如果您提供的代碼有效並且它是受支持的區域,它將返回一個區域,但它不會爲所有有效的ISO 3166代碼執行此操作。

在這裏看到一個更全面的解釋:https://social.msdn.microsoft.com/Forums/en-US/c9a8bc14-d571-4702-91a6-1b80da239009/question-of-regioninfo-and-region-cy

RegionInfo將罰款歐洲,但也有未用此方法(例如烏干達)驗證的幾個非洲國家。