[英]How can I get the bitmask value back out of an enum with the flag attribute in C#?
[英](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.