특정 속성을 표시 한 모든 속성 가져 오기


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 2011

답변:


132

사용하는 것이 가장 쉽습니다 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 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.