c# - 如何在值元组中使用泛型类型?
问题描述
假设我有两个枚举:
public enum eFruits : int
{
Apple = 1,
Pear = 2,
Banana = 3
}
public enum eAnimals : int
{
Dog = 1,
Cat = 2,
Rabbit = 3
}
我想在下拉列表/清单等中使用这些;基本上作为列表项。我作为试用的当前代码是这样的;
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)我想使用带有元组的泛型
2)希望使用 Generic 能够基于该元组生成列表项
这可能吗?我不确定这个声明会是什么样子。在这一点上,我无法让它工作。有人可以指出我正确的方向吗?
解决方案
您可以尝试以下通用方法。
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();
}
输出:
推荐阅读
- python - 使用 cythonize 命令编译会抛出错误
- cuda - 有没有办法在减少时减少来自syncthreads()的停顿延迟?
- java - 元素未添加到 ArrayList Java - Android
- python - 将数据框插入具有不同列名的数据库表
- php - yii2 bootstrap 4 没有在 ajax 上突出显示错误
- javascript - Chrome 扩展缺少 Set-Cookie 标头
- amazon-rds - 带有 AWS RDS 的 Spring Cloud AWS
- python-3.x - 我正在尝试在 python 上制作一个票价计算器,此代码部分在打印部分之后不运行
- android - 如何在 Azure 构建管道中忽略 Android 构建变体?
- python - 将列的值与变量进行比较并创建新列