Предположим, у меня есть два перечисления:
public enum eFruits : int
{
Apple = 1,
Pear = 2,
Banana = 3
}
public enum eAnimals : int
{
Dog = 1,
Cat = 2,
Rabbit = 3
}
Я хотел бы использовать их в выпадающих списках / контрольных списках и т.д .; в основном как listitems. Текущий код, который я имею в качестве попытки, это;
public static class EnumHelper
{
public static IEnumerable<(int eCode, eFruits eType)> GetFruitTypesAsListItems()
{
var enums = new List<(int eCode, eFruits eType)>();
foreach (var item in (eFruits[])Enum.GetValues(typeof(eFruits)))
{
enums.Add(((int)item, item));
}
return enums;
}
}
Две проблемы с этим;
1) Я хотел бы иметь это в общем виде
2) Это не выглядит хорошо внутри списка / выпадающего списка и т. Д., Поэтому я хотел бы использовать переопределение ToString.
Поэтому я подумал о чем-то вроде этого:
public class EnumListItem : Tuple<int, T>
{
public EnumListItem(int eCode, T eType)
: base(eCode, eType)
{ }
public override string ToString() => $"{base.Item2.ToString()} ({base.Item1})";
}
Так в действительности;
1) Я хотел бы использовать Generic с Tuple
2) Хотел бы использовать Generic, чтобы иметь возможность генерировать элементы списка на основе этого кортежа
Это возможно? Я не уверен, как будет выглядеть декларация об этом. На данный момент я не могу заставить его работать. Может ли кто-нибудь указать мне правильное направление?
2 ответа
Вы можете попробовать ниже общий метод.
public static class EnumHelper<T>
{
public static IEnumerable<(int eCode, T eType)> GetListItem()
{
var enums = new List<(int eCode, T eType)>();
foreach (var item in (T[])Enum.GetValues(typeof(T)))
{
enums.Add((Convert.ToInt32(item), item));
}
return enums;
}
}
И вы можете назвать это как,
public static void Main(string[] args)
{
var animals = EnumHelper<eAnimals>.GetListItem();
var fruits = EnumHelper<eFruits>.GetListItem();
}
Вывод:
Сделать его универсальной функцией довольно просто. И вы могли бы использовать yield
для возврата перечисляемого генератора вместо буферизованного List
, чтобы избавиться от ненужного использования памяти.
public static IEnumerable<(int, TEnum)> GetValues<TEnum>()
where TEnum : struct, Enum
{
foreach (var item in Enum.GetValues(typeof(TEnum)))
{
yield return ((int)item, (TEnum)item);
}
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.