c# - 如何在值元组中使用泛型类型?

标签 c# generics enums tuples derived-class

假设我有两个枚举:

    public enum eFruits : int
    {
        Apple = 1,
        Pear = 2,
        Banana = 3
    }
    public enum eAnimals : int
    {
        Dog = 1,
        Cat = 2,
        Rabbit = 3
    }

我想在下拉列表/ list 等中使用这些;基本上作为列表项。我当前的试用代码是这样的;

    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)希望使用泛型能够基于该元组生成列表项

这可能吗?我不确定这个声明会是什么样子。此时我无法让它工作。有人能指出我正确的方向吗?

最佳答案

您可以尝试以下通用方法。

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();
}

输出:

enter image description here

enter image description here

关于c# - 如何在值元组中使用泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338324/

相关文章:

java - 将魔数(Magic Number)映射到枚举值,反之亦然

c# - 本文档VS2015还没有加载任何符号

c# - 有没有办法连接 C# 匿名类型?

java - SpringMVC - 发送对象列表作为具有通用支持的参数时出错

java - 如何在非泛型方法中指定两个通配符在语义上相等?

java - 继承方法Object.clone()无法隐藏公共(public)抽象方法

java - 在 Enum 中保留可能的异常

javascript - 如何在 JavaScript 中的枚举类型名称中包含点字符?

c# - 使用不记名 token 身份验证时设置 asp.net CORE 2 身份验证 cookie

c# - 如何只查看 Resharper 中的公共(public)方法?