我有这部分代码:
var hasAttribute = TypeDescriptor.GetAttributes(property.DeclaringType).OfType<CrmTypeAttribute>()
.Any((attr)
=> ((CrmTypeAttribute)attr).Name == property.Name);
if (!hasAttribute)
{
var crmTypeAttribute = new CrmTypeAttribute(property.Name, crmType);
TypeDescriptor.AddAttributes(property.DeclaringType, crmTypeAttribute);
}
它有两个问题:
有人能告诉我这段代码有什么问题吗?
编辑:
由于某种原因,它只允许添加属性类型的一个属性,我在运行时添加了另一个属性类型并且它有效。
答案 0 :(得分:1)
我认为您的问题源于您忽略了TypeDescriptionProvider
来电中返回的AddAttributes
。
来自TypeDescriptor.AddAttributes
上的Reflector:
将类级属性添加到 目标组件类型。
<强>参数强>
类型:目标组件的
Type
。属性:要添加到组件类的
Attribute
个对象数组。返回值:用于添加指定属性的新创建的
TypeDescriptionProvider
。
调用静态方法时始终会创建一个新的TypeDescriptionProvider
实例。在添加更多属性并查询最近添加的属性时,您应该依赖这个新创建的提供程序实例。
答案 1 :(得分:0)
原来,该属性需要覆盖Attribute类的TypeId属性,以免被视为重复。
有关详细信息,请参阅here,它非常隐藏,也应在GetAttributes中提及。