[C#] Obteniendo el valor máximo de una enumeración


Answers

Estoy de acuerdo con la respuesta de Matt. Si necesita valores mínimos y máximos int, puede hacerlo de la siguiente manera.

Máximo:

Enum.GetValues(typeof(Foo)).Cast<int>().Max();

Mínimo:

Enum.GetValues(typeof(Foo)).Cast<int>().Min();
Question

¿Cómo se obtiene el valor máximo de una enumeración?




De acuerdo con Matthew J Sullivan, por C #:

   Enum.GetValues(typeof(MyEnum)).GetUpperBound(0);

Realmente no estoy seguro de por qué alguien querría usar:

   Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Last();

... Como palabra por palabra, semánticamente hablando, no parece tener tanto sentido? (Siempre es bueno tener diferentes formas, pero no veo el beneficio en este último).




Use la Última función no pudo obtener el valor máximo. Use la función "max" podría. Me gusta:

 class Program
    {
        enum enum1 { one, two, second, third };
        enum enum2 { s1 = 10, s2 = 8, s3, s4 };
        enum enum3 { f1 = -1, f2 = 3, f3 = -3, f4 };

        static void Main(string[] args)
        {
            TestMaxEnumValue(typeof(enum1));
            TestMaxEnumValue(typeof(enum2));
            TestMaxEnumValue(typeof(enum3));
        }

        static void TestMaxEnumValue(Type enumType)
        {
            Enum.GetValues(enumType).Cast<Int32>().ToList().ForEach(item =>
                Console.WriteLine(item.ToString()));

            int maxValue = Enum.GetValues(enumType).Cast<int>().Max();     
            Console.WriteLine("The max value of {0} is {1}", enumType.Name, maxValue);
        }
    }



Esto es un poco quisquilloso, pero el valor máximo real de cualquier enumeración es Int32.MaxValue (suponiendo que es una enumeración derivada de int). Es perfectamente legal emitir cualquier valor Int32 a cualquier enumeración, independientemente de si realmente declaró o no un miembro con ese valor.

Legal:

enum SomeEnum
{
    Fizz = 42
}

public static void SomeFunc()
{
    SomeEnum e = (SomeEnum)5;
}