首页 > 解决方案 > 使用泛型从枚举中获取最大值

问题描述

如何使用泛型从枚举中获取最大 int 值?

我已经尝试了以下但是它显示以下编译错误:

无法将 T 隐式转换为 int

    int maxValue = GetMaxValue<SomeEnum>(typeof(SomeEnum)); //expecting 2

    private static int GetMaxValue<T>(Type enumType)
    {
        return Enum.GetValues(enumType).Cast<T>().Max();
    }

    public enum SomeEnum
    {
        ValueOne = 1,
        Value = 2
    }

标签: c#enums

解决方案


在 C# 7.3或更高版本的情况下,您可以以不同的方式实现Sweeper 的想法(借助where T : Enum约束):

public static T GetMaxValue<T>() where T : Enum {
  return Enum.GetValues(typeof(T)).Cast<T>().Max();
}

...

SomeEnum max = GetMaxValue<SomeEnum>();

请注意,结果是它本身,这就是为什么我们对枚举基础类型( , , )enum没有任何问题byteshort intlong


推荐阅读