2017-02-04 8 views
1

У меня есть класс с именем CommonKeys.cs и содержит свойство, как показано ниже,CategoryAttribute возвращает «Misc» для категории под названием как «Default»

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; 
      } 
     } 
    } 
} 

Но когда я изменить название категории, кроме «По умолчанию», он возвращает точное имя категории.

Вопрос, почему «Misc» возвращается, когда «По умолчанию» задано как категория.

С уважением,

Амаль Радж

+0

Вы задали 18 вопросов и приняли только один ответ. Пожалуйста, просмотрите свой предыдущий вопрос, а также текущий вопрос и пометьте правильные ответы как принятые, и предложите полезные ответы, включая принятый. :) –

ответ

1

Это из-за реализации CategoryAttribute класса. Для некоторых значений он получает название категории из строковых ресурсов .net framework. На этих значений Default, которая определяется следующим образом:

PropertyCategoryDefault = Misc 

Вы получите другой текст также для Config, DragDrop и WindowStyle:

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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^