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



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



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




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



Related



Tags

c# c#   enums