2014-12-23 5 views
-2

직렬화에 대한 몇 가지 클래스를 사용하는 파일의 확장자를 선언 할 수 있습니다 사용자 지정 특성이있다 이제 반사를 사용하여 GetFilterString() 결과를 검색합니다.형식화 된 래퍼

string filter = (Attribute.GetCustomAttribute(typeof(UsersDB), typeof(FileExtensionAttribute)) as FileExtensionAttribute).GetFilterString(); 
saveFileDialog.Filter = filter; 
openFileDialog.Filter = filter; 

나는 더 많은 표현을 쓰고 싶습니다. 필자 덜 장황한, 이런 식으로 뭔가 :

UsersDB.Attributes.FileExtension.GetFilterString(); 

또는

AttributesOf(UsersDB).FileExtension.GetFilterString(); 

적어도

그리고 나는 어떤 속성과 클래스의 구문을 기원합니다.

당신이

static class ObjectExtends 
{ 

    public static T GetAttribute<T>(this object obj) where T : Attribute 
    { 
     return (T)Attribute.GetCustomAttribute(obj.GetType(), typeof(T)); 
    } 
    public static T GetAttribute<T>(Type t) where T : Attribute 
    { 
     return (T)Attribute.GetCustomAttribute(t, typeof(T)); 
    } 
} 

사용과 같은 객체를 확장 할 수

답변

2

:

string s = "Hello World"; 
s.GetAttribute<SomeAttribute>(); 

또는

ObjectExtends.GetAttribute<SomeAttribute>(typeof(SomeClass));