У меня есть класс и свойства. Некоторые свойства могут быть помечены атрибутом (это мое LocalizedDisplayName
наследство от DisplayNameAttribute
). Это метод получения всех свойств класса:
private void FillAttribute()
{
Type type = typeof (NormDoc);
PropertyInfo[] propertyInfos = type.GetProperties();
foreach (var propertyInfo in propertyInfos)
{
...
}
}
Я хочу добавить свойства класса в список, который помечает LocalizedDisplayName
и отображает значение атрибута в списке. Как я могу это сделать?
ИЗМЕНИТЬ
Это 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);
}
}
Я хочу получить строку из файла ресурсов. Благодарю.
c#
reflection
user348173
источник
источник
ToString()
? Можете ли вы отредактировать свой вопрос, чтобы добавить код для настраиваемых атрибутов, которые вы применяете, и указать, какие данные вы хотите использовать?Ответы:
Наверное, проще всего использовать
IsDefined
:var properties = type.GetProperties() .Where(prop => prop.IsDefined(typeof(LocalizedDisplayNameAttribute), false));
Чтобы получить сами значения, вы должны использовать:
var attributes = (LocalizedDisplayNameAttribute[]) prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);
источник
IEnumerable<PropertyInfo>
здесь :) Полезно, если человек, видящий этот ответ, не знаком с Linq или Reflections.