Monday, October 23, 2006

Como obtener el primer y ultimo elemento de un Enum

Este articulo aplica a C# 2.0

Hay veces que tenemos un tipo enumeracion y queremos asegurarnos que cierto parametro esta dentro del rango de nuestra enumeracion, la gran mayoria del codigo que he visto checa haber si X valor es mayor al ultimo elemento de la enumeracion, algo asi:

enum TestEnum {

  Enum1 = 1, Enum2 = 2, Enum3 = 3;

}

TestEnum myValue; //generalmente esto pasa cuando esta variable viene como parametro a una funcion

if (myValue > TestEnum.Enum3) //algun codigo para manejar este problema

y cada vez que tuvieran que actualizar la enumeracion tendrian que modificar esta parte del codigo.

Esta funcion nos regresa el primer y ultimo elemento de un tipo Enum, la escribi de forma generica para que pueda ser usada con cualquier tipo enum, pero podrian modificarla para ser para un tipo especifico y se podria usar en C# 1.0 (VS2003), creo que el uso seria raro pero pues aqui esta para cuando se ofrezca

public void GetLowHighFromEnum<T>(out T lowElement, out T highElement) {
if (!typeof(T).IsSubclassOf(typeof(Enum))) //make sure we got an Enum
throw new ArgumentException("parameterized type should be Enum");
T[] values = (T[])Enum.GetValues(typeof(T));
lowElement = values[0];
highElement = values[values.Length - 1];
}

para usarla seria algo mas o menos asi

TestEnum te1, te2;
GetLowHighFromEnum<TestEnum>(out te1, out te2);
Console.WriteLine(te1.ToString());
Console.WriteLine(te2.ToString());

No comments: