我有一个包含数百个属性的类。每个属性都使用 [CategoryAttribute("My Category Name")] 属性子句声明,以便在 PropertyGrid 中很好地显示。我想利用这个相同的 CategoryAttribute 属性来设置类中标有特定 categoryAttribute 类别的所有属性的值。下面的代码编译并运行,但它没有完成任务,因为 att_coll 不包含我预期的 CategoryAttribute 属性。有谁知道如何做到这一点?非常感谢。
class my_class
{
[CategoryAttribute("Category One")]
public int property_1
{
get { return _property_1; }
set { _property_1 = value; }
}
[CategoryAttribute("Category One")]
public int property_2
{
get { return _property_2; }
set { _property_2 = value; }
}
}
void ClearCatagory(string category_name)
{
CategoryAttribute target_attribute = new CategoryAttribute(category_name);
Type my_class_type = my_class.GetType();
PropertyInfo[] prop_info_array = my_class_type.GetProperties();
foreach (PropertyInfo prop_info in prop_info_array)
{
AttributeCollection att_coll = TypeDescriptor.GetAttributes(prop_info);
CategoryAttribute ca = (CategoryAttribute) att_col[typeof(CategoryAttribute)];
if (ca.Equals(target_attribute))
{
prop_info.SetValue(my_class, 0, null);
}
}
}