Я делаю несколько выпадающих списков из перечислений. Например, длина lunchbreak перечисления добавит выпадающие элементы списка, как это:Можно ли прокручивать перечисление по типу?
foreach (LunchBreak type in Enum.GetValues(typeof(LunchBreak)))
{
items.Add(new SelectListItem()
{
Text = SiteUtilities.GetEnumDescription(type),
Value = ((int)type).ToString()
});
}
Где мое перечисление в виде:
public enum LunchBreak : int
{
[Description("20 minutes paid")]
Paid_20 = 0,
[Description("20 minutes unpaid")]
Unpaid_20 = 1
}
Есть ли способ сделать что цикл Еогеасп родовым поэтому я могу перейти в typeof(LunchBreak)
, поэтому мне не нужно повторять код для всех остальных перечислений?
Я пробовал писать, где бы я мог просто пройти LunchBreak
, но потом он пожаловался на меня, используя перечисление как Тип.
Я пытался сделать метод расширения, как здесь, так что я мог бы назвать что-то вроде LunchBreak.GetSelectListItems("Please select a lunch break...")
и взглянули на несколько постов, как это: Create Generic method constraining T to an Enum, но на самом деле не получить то, что происходит
Extension попытка:
public static class EnumExtensions
{
public static List<SelectListItem> GetSelectListItems<T>(string defaultValue) where T : struct, IConvertible
{
if (typeof(T).IsEnum)
{
List<SelectListItem> items = new List<SelectListItem>()
{
new SelectListItem()
{
Text = defaultValue,
Value = string.Empty
}
};
foreach (T item in Enum.GetValues(typeof(T)))
{
items.Add(new SelectListItem()
{
Text = SiteUtilities.GetEnumDescription(item), // this line fails as item is expected to be of type Enum
Value = ((int)item).ToString() // this line fails as I can't cast item as an int
});
}
return items;
}
throw new ArgumentException("T must be an enumerated type");
}
}
Отлично, спасибо! –