Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get all properties which marked certain attribute

Tags:

c#

reflection

I have class and properties in there. Some properties can be marked attribute (it's my LocalizedDisplayName inherits from DisplayNameAttribute). This is method for get all properties of class:

private void FillAttribute() {     Type type = typeof (NormDoc);     PropertyInfo[] propertyInfos = type.GetProperties();     foreach (var propertyInfo in propertyInfos)     {         ...     } } 

I want to add properties of class in the listbox which marked LocalizedDisplayName and display value of attribute in the listbox. How can I do this?

EDIT
This is LocalizedDisplayNameAttribute:

public class LocalizedDisplayNameAttribute : DisplayNameAttribute     {         public LocalizedDisplayNameAttribute(string resourceId)             : base(GetMessageFromResource(resourceId))         { }          private static string GetMessageFromResource(string resourceId)         {             var test =Thread.CurrentThread.CurrentCulture;             ResourceManager manager = new ResourceManager("EArchive.Data.Resources.DataResource", Assembly.GetExecutingAssembly());             return manager.GetString(resourceId);         }     }   

I want to get string from resource file. Thanks.

like image 558
user348173 Avatar asked Sep 05 '11 08:09

user348173


1 Answers

It's probably easiest to use IsDefined:

var properties = type.GetProperties()     .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false)); 

To get the values themselves, you'd use:

var attributes = (LocalizedDisplayNameAttribute[])        prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false); 
like image 99
Jon Skeet Avatar answered Oct 05 '22 13:10

Jon Skeet