[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?




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



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).




Links