获取标记了某些属性的所有属性


80

我在那里有类和属性。可以将某些属性标记为属性(这是我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);
        }
    }  

我想从资源文件中获取字符串。谢谢。


什么是“属性值”?属性是类,并且可能具有很多“值”(属性/字段)。也许您是在谈论来自的结果ToString()?您可以编辑问题以为要应用的自定义属性添加一些代码,并指定要从中删除哪些数据吗?
Merlyn Morgan-Graham

Answers:


131

这可能是最容易使用的IsDefined

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

要自己获取值,可以使用:

var attributes = (LocalizedDisplayNameAttribute[]) 
      prop.GetCustomAttributes(typeof(LocalizedDisplayNameAttribute), false);

7
+1; Nit-pick:我会IEnumerable<PropertyInfo>在这里指定:)如果看到这个答案的人不熟悉Linq或Reflections会很有帮助。
Merlyn Morgan-Graham
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.