C#将国家/地区缩写返回国家名称

时间:2018-09-29 03:13:01

标签: c#

我想将国家缩写转换为全名 我的代码:

public string Convert(string country)
{
    if (country == nameof(AC)) return AC;
    if (country == nameof(AF)) return AF;
    if (country == nameof(AX)) return AX;
    if (country == nameof(AL)) return AL;
    if (country == nameof(DZ)) return DZ;
    return country;
}
public const string
    AC = "ASCENSION ISLAND",
    AF = " AFGHANISTAN",
    AX = " ALAND",
    AL = " ALBANIA",
    DZ = " ALGERIA",
    AD = " ANDORRA",

它可以工作,但是我想知道是否有可能使其变得更容易。 因为如果我在所有国家/地区都无法做到,那就太长了。

3 个答案:

答案 0 :(得分:1)

简单

public string Convert(string country)
    {
        string result = string.Empty;
        FieldInfo fieldInfo = GetType().GetField(country);
        result = fieldInfo?.GetValue(this)?.ToString();
        return result;
    }

答案 1 :(得分:1)

我经常将enum与属性一起使用来解决这类问题。这是非常方便且良好的编码约定。您可以尝试此解决方案

    using System;
    using System.Reflection;

    namespace CountryEnum
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Using enum
                COUNTRY_CODE enum_variable = COUNTRY_CODE.AF;

                Console.WriteLine("Enum variable: " + Program.GetEnumDescription(enum_variable));

                // Have short code string of country as input -> convert it to enum
                string country_code = "AL";
                COUNTRY_CODE convertResult = COUNTRY_CODE.UNKNOWN;
                Enum.TryParse(country_code, out convertResult);

                Console.WriteLine("string variable: " + Program.GetEnumDescription(convertResult));

                Console.ReadLine();

            }

            /// <summary>
            /// GET string description
            /// </summary>
            /// <param name="en"></param>
            /// <returns></returns>
            public static string GetEnumDescription(Enum en)
            {
                Type type = en.GetType();

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

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

                        if (attrs != null && attrs.Length > 0)
                            return ((EnumDisplayString)attrs[0]).DisplayString;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

                return en.ToString();

            }
        }



        public enum COUNTRY_CODE
        {
            [EnumDisplayString("AFGHANISTAN")]
            AF
            ,
            [EnumDisplayString("ALBANIA")]
            AL
           ,
            [EnumDisplayString("UNKNOWN")]
            UNKNOWN
        }

        public class EnumDisplayString : Attribute
        {
            public string DisplayString;

            public EnumDisplayString(string text)
            {
                this.DisplayString = text;
            }
        }
    }

答案 2 :(得分:1)

我建议使用字典将国家/地区代码存储为键,将国家/地区名称存储为值。像这样:

Public Dictionary<string, string> countryCodes = new Dictionary<string, string>
{
    { "AC", "ASCENSION ISLAND" },
    { "AF", "AFGHANISTAN" },
    { "AX", "ALAND" },
    { "AL", "ALBANIA" }
    //Keep adding countries as you need
};

然后,您不需要使用convert方法来获取国家/地区名称,您只需使用国家/地区代码从词典中获取该国家/地区代码的值即可。

赞: (假定字符串变量countryCode包含2个字符的国家/地区代码

string countryName = countryCodes[countryCode];