Ho un'enumerazione per le mie cose in questo modo:Extension sulla enumerazione, non un'istanza di enumerazione
public enum Things
{
OneThing,
AnotherThing
}
Vorrei scrivere un metodo di estensione per questa enumerazione (simile a Prise's answer here), ma mentre che le opere di metodo su un un'istanza dell'enumerazione, ala
Things thing; var list = thing.ToSelectList();
vorrei farlo funzionare sul reale enumerazione invece:
var list = Things.ToSelectList();
ho potuto solo fare
var list = default(Things).ToSelectList();
Ma non mi piace il look di questo :)
ho ottenuto più stretto con il seguente metodo di estensione:
public static SelectList ToSelectList(this Type type)
{
if (type.IsEnum)
{
var values = from Enum e in Enum.GetValues(type)
select new { ID = e, Name = e.ToString() };
return new SelectList(values, "Id", "Name");
}
else
{
return null;
}
}
Usato così:
var list = typeof(Things).ToSelectList();
Possiamo fare meglio di così?
Puoi creare una classe mascherata da enum. Gli svantaggi sono per lo più la programmazione non standard, credo, e l'incapacità di eliminare i metodi ereditati da Object. – Iucounu
Non penso che sia una pratica corretta usare verbo per i nomi delle classi. idealmente il nome della classe dovrebbe essere sostantivo e significativo in sé. – user3264784