2013-08-01 4 views
-1

Моя программа находит ваш IP-адрес в стране. , когда вы из Германии, он будет отображать DE когда вы находитесь в США он будет отображать США и т.д.Назначение строки C#

Теперь мой вопрос заключается в том, чтобы превратить строку автоматически, может быть от HU Венгрии. Должен ли я создать itemlist или sth, как это?

Screenshot

Там вы видите, я получаю информацию о стране с веб-сайта http://api.hostip.info/country.php Вы видите выше Получить кнопку IP Страна: DE и я хочу, чтобы изменить это автоматически в Германии

+2

вероятно словарь. Полный список [здесь] (http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm) –

ответ

1

Вы могли бы создайте словарь и установите ключ в качестве возвращаемого результата, чтобы значение было желаемым именем страны. Посмотрите здесь для общего обзора: Tutorial

1

Вот два варианта решения этой проблемы:

  • Построить Dictionary<Country, string>
  • Используйте Country перечисление и декорировать его с Description атрибутом

Постройте a Dictionary<Country, string>, например:

enum Country 
{ 
    UnitedStates, 
    Germany, 
    Hungary 
} 

Dictionary<Country, string> CountryNames = new Dictionary<Country, string> 
{ 
    { Country.UnitedStates, "US" }, 
    { Country.Germany, "DE" } 
    { Country.Hungary, "HU" } 
}; 

static string ConvertCountry(Country country) 
{ 
    string name; 
    return (CountryNames.TryGetValue(country, out name)) 
     ? name : country.ToString(); 
} 

Теперь вы можете использовать Dictionary<Country, string> через статический ConvertCountry метод, например:

var myCountry = ConvertCountry(Country.UnitedStates)); 

Используйте Country перечисление и украсить его с атрибутом Description, как это:

enum Country 
{ 
    [Description("US")] 
    UnitedStates, 
    [Description("DE")] 
    Germany, 
    [Description("HU")] 
    Hungary 
} 

Теперь вы можете используйте этот метод для получения значения атрибута Description, например:

public static string GetDescription(Enum en) 
    { 
     Type type = en.GetType(); 

     MemberInfo[] memInfo = type.GetMember(en.ToString()); 

     if (memInfo != null && memInfo.Length > 0) 
     { 
      object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); 

      if (attrs != null && attrs.Length > 0) 
      { 
       return ((DescriptionAttribute)attrs[0]).Description; 
      } 
     } 

     return en.ToString(); 
    } 

Использование выше метода, например:

var myCountryDescription = GetDescription(Country.UnitedStates); 
+0

Можете ли вы дать мне пример литерли? :) –

+0

+1 отличный ответ, @DiarDo скопируйте код и попробуйте его изящно, как он есть, что упростит, потеряет элегантность. –

+0

Разве они не хотят противоположности этого? Они хотят разрешить «США» в «Соединенных Штатах». –

1

Вы можете создать объект, отношения кратко- и длинное имя страны с помощью этого table.

That's еще один пост, который ответит this post