Je pense que ton code est magnifique!!!
La seule amélioration serait de placer le code dans une Méthode d'Extension.
EDIT:
Quand je pense à ce sujet, ce que vous voulez faire est d'utiliser l' Enum
comme dans la définition et non pas une instance de l'enum, qui est requis par les extensions des méthodes.
J'ai trouvé cette question, ce qui résout-il vraiment bien:
public class SelectList
{
// Normal SelectList properties/methods go here
public static Of<T>()
{
Type t = typeof(T);
if (t.IsEnum)
{
var values = from Enum e in Enum.GetValues(type)
select new { ID = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name");
}
return null;
}
}
// called with
var list = SelectList.Of<Things>();
Vous seul pouvez retourner un Dictionary<int, string>
et pas un SelectList
, mais vous obtenez l'idée.
EDIT2:
Ici, nous allons avec un exemple de code qui couvre le cas où vous êtes en train de regarder.
public class EnumList
{
public static IEnumerable<KeyValuePair<T, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<T, string>(p, p.ToString()))
.ToList();
}
}
Ou cette version peut-être, où la clé est un int
public class EnumList
{
public static IEnumerable<KeyValuePair<int, string>> Of<T>()
{
return Enum.GetValues(typeof (T))
.Cast<T>()
.Select(p => new KeyValuePair<int, string>(Convert.ToInt32(p), p.ToString()))
.ToList();
}
}