Comment obtenez-vous la valeur max d’un enum ?
Réponses
Trop de publicités?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
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 :