170 votes

Obtention de la valeur max d’un enum

Comment obtenez-vous la valeur max d’un enum ?

244voto

Matt Hamilton Points 98268

Enum.GetValues() semble retourner les valeurs dans l’ordre, que vous pouvez faire quelque chose comme ceci :

Edit

Pour ceux qui ne veulent pas lire les commentaires : vous pouvez également faire de cette façon :

... qui fonctionne lorsque certains de vos valeurs enum sont négatifs.

52voto

Karanvir Kang Points 111

Je suis d’accord avec la réponse de Matt. Si vous avez besoin juste les min et les valeurs int max, alors vous pouvez le faire comme suit.

Maximum :

Configuration minimale :

22voto

Shimmy Points 23393

Selon Matt Hamilton réponse, je pensais que sur la création d'une méthode d'Extension.

Depuis ValueType n'est pas accepté comme un paramètre de type générique contrainte, je n'ai pas trouvé un meilleur moyen pour limiter T de Enum , mais la suivante.

Toutes les idées seraient appréciés.

PS. s'il vous plaît ignorer mon VB désire, j'ai de l'amour à l'aide de VB de cette façon, c'est la force de VB et c'est pourquoi j'aime VB.

Howeva, elle est ici:

C#:

static void Main(string[] args)
{
    MyEnum x = GetMaxValue<MyEnum>();
}

public static TEnum GetMaxValue<TEnum>() 
    where TEnum : IComparable, IConvertible, IFormattable
{
    Type type = typeof(TEnum);

    if (!type.IsSubclassOf(typeof(Enum)))
        throw new
            InvalidCastException
                ("Cannot cast '" + type.FullName + "' to System.Enum.");

    return (TEnum)Enum.ToObject(type, Enum.GetValues(type).Cast<int>().Last());
}

enum MyEnum
{
    ValueOne,
    ValueTwo
}

VB:

Public Function GetMaxValue _
    (Of TEnum As {IComparable, IConvertible, IFormattable})() As TEnum

    Dim type = GetType(TEnum)

    If Not type.IsSubclassOf(GetType([Enum])) Then _
        Throw New InvalidCastException _
            ("Cannot cast '" & type.FullName & "' to System.Enum.")

    Return [Enum].ToObject(type, [Enum].GetValues(type) _
                        .Cast(Of Integer).Last)
End Function

13voto

JaredPar Points 333733

Il s’agit de nitpicky légèrement, mais la valeur maximale réelle de n’importe quel enum est Int32.MaxValue (en supposant que c’est un enum dérivé int). Il est parfaitement légal à caster une valeur Int32 à n’importe quel enum indépendamment de si oui ou non il en fait déclaré membre avec cette valeur.

Juridique :

10voto

Eric Feng Points 31

Après essayé une autre fois, j’ai eu cette méthode d’extension :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X