数百のプロパティを含むクラスがあります。各プロパティは、[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);
}
}
}