簡體   English   中英

(C#)如何將我的Enum轉換為以VALUE作為屬性,以KEY作為char(枚舉的值)的字典?

[英](C#) How can I convert my Enum to a dictionary getting the VALUE as the attribute and the KEY as the char(value of the enum)?

編碼員

這是我的第一個問題。 因此,如果缺少某些stackoverflow模式,請原諒,我將按照您的要求進行編輯。

我需要做的只是:將枚舉轉換為一個集合(我剛開始使用的是字典),但忽略了枚舉主值本身...我只想要屬性(如XmlEnum)CHAR值 因此,我可以填充我的下拉列表並感到高興。

任何代碼:

// whatever.aspx
<asp:DropDownList ID="ddlGreekTeam" runat="server" ... whatever />
<asp:DropDownList ID="ddlMilitaryTeam" runat="server" ... whatever />

// whatever.aspx.cs
private void OnPageLoad()
{
    PopulateTeamDropDownLists<GreekTeam>(ddlGreekTeam)
    PopulateTeamDropDownLists<MilitaryTeam>(ddlMilitaryTeam)
    // ... whatever
}
private void PopulateTeamDropDownLists<TEnum>(DropDownList ddl)
{
    ddl.Items.Clear();
    ddl.Items.Insert(0, new ListItem("All", null));

    foreach(var team in ListTeams<TEnum>())
        ddl.Items.Add(new ListItem(team.Value.ToString(), team.Key));
}

// method needed
public IDictionary<string, char> ListTeams<TEnum>()
{
    // TODO: the magic I'm looking for...
}

// enums
public enum GreekTeam
{
    [XmlEnum("Alpha Team")]
    Alpha = 'A',
    [XmlEnum("Beta Team")]
    Beta = 'B',
    [XmlEnum("Chi Team")]
    Gamma = 'G',
    // ... whatever
}

public enum MilitaryTeam
{
    [XmlEnum("Alpha Team")]
    Alpha = 'A',
    [XmlEnum("Bravo Team")]
    Bravo = 'B',
    [XmlEnum("Charlie Team")]
    Charlie = 'C',
    // ... whatever
}

輸出:

<select>
  <option value="A">Alpha Team</option>
  <option value="B">Beta Team</option>
  <option value="G">Gamma Team</option>
  ...
</select>
<select>
  <option value="A">Alpha</option>
  <option value="B">Bravo Team</option>
  <option value="C">Charlie Team</option>
  ...
</select> 

很久以前,我創建了這個:

public class EnumUtils
{

    public static string GetEnumDescription(object en)
    {
        Type type = en.GetType();
        MemberInfo[] memInfo = type.GetMember(en.ToString());
        if (memInfo != null && memInfo.Length > 0)
        {
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(EnumDescription), false);
            if (attrs != null && attrs.Length > 0)
                return ((EnumDescription)attrs[0]).Text;
        }
        return en.ToString();
    }
    public static List<EnumObject> GetAllValuesFromEnum<T>()
    {
        List<EnumObject> AllValue = new List<EnumObject>();
        foreach (Enum enm in Enum.GetValues(typeof(T)))
        {
            AllValue.Add(new EnumObject(GetEnumDescription(enm), enm));
        }
        return AllValue;

    }
    public static Enum GetEnumValue<T>(string sEnumValue)
    {
        //List<EnumObject> allobject = GetAllValuesFromEnum<T>();
        foreach (Enum enm in Enum.GetValues(typeof(T)))
        {
            if (enm.ToString() == sEnumValue)
                return enm;
        }
        return null;
    }
    public static Object GetEnumValueFromDescription<T>(string sEnumDescription) //where T: Enum 
    {
        List<EnumObject> allobject = GetAllValuesFromEnum<T>();
        foreach (EnumObject item in allobject)
        {
            if (item.EnumDisplay == sEnumDescription)
                return item.EnumValue;
        }
        return default(T) as Enum;
    }

}

public class EnumObject
{
    private string _EnumDisplay;
    private Enum _EnumValue;

    public EnumObject(string enumDisplay, Enum enumValue)
    {
        _EnumDisplay = enumDisplay;
        _EnumValue = enumValue;
    }
    public string EnumDisplay
    {
        get
        {
            return _EnumDisplay;
        }
        set
        {
            _EnumDisplay = value;
        }
    }

    public Enum EnumValue
    {
        get { return _EnumValue; }
        set { _EnumValue = value; }
    }
}
public class EnumDescription : Attribute
{
    public string Text;
    public EnumDescription(string text)
    { Text = text; }
}

您可以使用GetAllValuesFromEnum獲取所有屬性值,只需在代碼中更改屬性類型typeof(EnumDescription)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM