To get all Description Attributes of an Enum using C# or VB.NET you can use the snippet below.
Sample C# – Class
public class DescriptionAttributes<T> { protected List<DescriptionAttribute> Attributes = new List<DescriptionAttribute>(); public List<string> Descriptions { get; set; } public DescriptionAttributes() { RetrieveAttributes(); Descriptions = Attributes.Select(x => x.Description).ToList(); } private void RetrieveAttributes() { foreach (var attribute in typeof(T).GetMembers().SelectMany(member => member.GetCustomAttributes(typeof(DescriptionAttribute), true).Cast<DescriptionAttribute>())) { Attributes.Add(attribute); } } }
Usage C#
class Program { public enum TestEnum { [Description("An apple a day keeps the doctor away")] Apple=0, [Description("Yummie Strawberry")] Strawberry=1, [Description("Banana for scale")] Banana=2 } static void Main(string[] args) { var descriptions = new DescriptionAttributes<TestEnum>().Descriptions.ToList(); foreach (var description in descriptions) { Console.WriteLine(description); } Console.Read(); } }
Sample VB.NET – Class
Public Class DescriptionAttributes(Of T) Protected Attributes As New List(Of DescriptionAttribute)() Public Property Descriptions() As List(Of String) Get Return m_Descriptions End Get Set m_Descriptions = Value End Set End Property Private m_Descriptions As List(Of String) Public Sub New() RetrieveAttributes() Descriptions = Attributes.[Select](Function(x) x.Description).ToList() End Sub Private Sub RetrieveAttributes() For Each attribute As var In GetType(T).GetMembers().SelectMany(Function(member) member.GetCustomAttributes(GetType(DescriptionAttribute), True).Cast(Of DescriptionAttribute)()) Attributes.Add(attribute) Next End Sub End Class
Usage VB.NET
Class Program Public Enum TestEnum <Description("An apple a day keeps the doctor away")> _ Apple = 0 <Description("Yummie Strawberry")> _ Strawberry = 1 <Description("Banana for scale")> _ Banana = 2 End Enum Private Shared Sub Main(args As String()) Dim descriptions = New DescriptionAttributes(Of TestEnum)().Descriptions.ToList() For Each description As var In descriptions Console.WriteLine(description) Next Console.Read() End Sub End Class