【问题标题】:Listing the values of an enum from the Enum base class列出 Enum 基类中的枚举值
【发布时间】:2020-11-17 02:01:35
【问题描述】:

我想知道当枚举作为通用参数传入时如何列出枚举的值。下面的代码是我对此的尝试。我希望 ListReturnTypeValues 方法中的循环会循环通过值 Red、Blue、Green,但代码会失败。

    public enum Colour
    {
        Red,
        Blue,
        Green
    }

    class Program
    {
        static void Main(string[] args)
        {
            ListReturnTypeValues(i => (Colour)i);
        }

        static void ListReturnTypeValues(Func<int, Enum> func)
        {
            foreach(var i in Enum.GetValues(func.Method.ReturnType))
            {
                //Cycle through Red, Blue, Green...
            }
        }
    }

【问题讨论】:

  • 让我们退后一步......你想在这里实现什么?
  • 也许您正在寻找类似static void ListReturnTypeValues&lt;T&gt;() where T :Enum 的东西,尽管没有更详细的解释,但您的问题对我来说还不清楚
  • 我刚刚删除了我的答案,因为就像@TheGeneral 提到的那样,我想知道你想做什么?如果您总是将颜色作为参数传递,那么您根本不需要枚举,只需传递颜色。你只想要名字?
  • 我希望实现它能够循环遍历枚举的值,无论传入什么特定的枚举。同样应该能够传入一个返回 Animal (例如),并且仍然让它循环遍历 Animal Enum 的所有值。
  • 我可能应该说得更清楚些,但之所以如此,是因为这是对我的代码库中类似案例的简化。

标签: c# generics enums


【解决方案1】:

尝试使用Enum.GetNames(typeof(Colour))

【讨论】:

  • 这基本上是我想要的,除了我希望它能够通用地工作,这样我就可以将任何 Enum 传递给 Lamda 表达式,并且仍然让它在值之间循环。
  • 调用“func”,像这样。 "foreach (var i in Enum.GetNames(func(0).GetType()))"
【解决方案2】:

在@TheGeneral's Comment 的启发下,我找到了一个可行的解决方案:

    public enum Colour
    {
        Red,
        Blue,
        Green
    }

    class Program
    {
        static void Main(string[] args)
        {
            ListReturnTypeValues(i => (Colour)i);
        }

        static void ListReturnTypeValues<T>(Func<int, T> func) where T : Enum
        {
            foreach(var i in Enum.GetValues(typeof(T)))
            {
                //Cycle through Red, Blue, Green...
            }
        }
    }

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多