2017-02-04 5 views
1

라는 이름으로 범주 "기타"를 반환 CategoryAttribute 내가 클래스가 <code>CommonKeys.cs</code> 명명하고 다음과 같이 속성을 포함해야한다 "기본"

public class Test 
{ 
    private SolidBrush _backgroundbrush; 
    [CategoryAttribute("Default")] 
    public SolidBrush BackgroundBrush 
    { 
     get 
     { 
      return this._backgroundbrush; 
     } 
     set 
     { 
      this._backgroundbrush = value; 
     } 
    } 
} 

내가 코드를 아래에 위의 특성과 그 카테고리에 액세스

, 원래 범주 "기본값"대신 범주로 "기타"를 반환합니다. 내가 "기본"이외의 카테고리 이름을 변경할 때

public static void GetCategoryName() 
{ 
    PropertyInfo[] Props = typeof(Test).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
    foreach (PropertyInfo prop in Props) 
    { 
     var attributes = prop.GetCustomAttributes(false); 
     string categoryName = String.Empty; 
     foreach (var attr in attributes) 
     { 
      if (attr is CategoryAttribute) 
      { 
       categoryName = (attr as CategoryAttribute).Category; 
      } 
     } 
    } 
} 

, 그것은 정확한 카테고리 이름을 반환합니다.

"Default"가 카테고리로 설정되면 내 질문이 왜 "기타"로 반환되는지가 궁금합니다.

감사합니다,

아말 주권

+0

당신은 Config, DragDropWindowStyle에 대한 또 다른 텍스트를 받게됩니다

PropertyCategoryDefault = Misc 

: 그 값에 이런 식으로 정의된다 Default입니다 귀하는 18 가지 질문을하고 단 하나의 대답만을 받아 들였습니다. 이전 질문과 현재 질문을 검토하고 정답을 정답으로 표시하고 허용 된 답변을 포함하여 유용한 대답을 upvote하십시오. –

답변

1

이 때문에 CategoryAttribute 클래스의 구현입니다. 일부 값의 경우 .net 프레임 워크의 문자열 자원에서 범주 이름을 가져옵니다.

다음
PropertyCategoryConfig = Configurations 
PropertyCategoryDragDrop = Drag Drop 
PropertyCategoryWindowStyle = Window Style 

관련 implemenattions :

public string Category { 
    get { 
     if (!localized) { 
      localized = true; 
      string localizedValue = GetLocalizedString(categoryValue); 
      if (localizedValue != null) { 
       categoryValue = localizedValue; 
      } 
     } 
     return categoryValue; 
    } 
} 
protected virtual string GetLocalizedString(string value) { 
#if !SILVERLIGHT 
    return (string)SR.GetObject("PropertyCategory" + value); 
#else 
    bool usedFallback; 
    string localizedString = SR.GetString("PropertyCategory" + value, out usedFallback); 
    if (usedFallback) { 
     return null; 
    } 
    return localizedString; 
#endif 
}