typedescriptor.addattributes()替换了当前属性的添加INSEAD
-
10-10-2019 - |
题
我有一部分代码:
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);
}
它有两个问题:
- 由于某种原因,Oftype返回一个空的Ienumerable,尽管它应该返回该类型的正确属性,然后我检查了。它们存在。
- 这是严重的问题。而不是添加属性,而是用crmtypeattribute代替同一类型的旧属性。 我已经明显允许的变态是真实的。
谁能告诉我此代码怎么了?
编辑:
由于某种原因,它仅允许添加一个属性类型的一个属性,我在运行时添加了另一个属性类型,并且可以使用。
解决方案 2
事实证明,属性需要覆盖属性类的TypeID属性以不被重复处理。
看 这里 有关详细信息,它非常隐藏,也应该在GetAttibutes中提及。
其他提示
我认为您的问题源于您无视返回的事实 TypeDescriptionProvider
来自 AddAttributes
称呼。
从反射器上 TypeDescriptor.AddAttributes
:
将类级属性添加到目标组件类型中。
参数
类型: : 这
Type
目标组件的。属性: :一系列
Attribute
对象添加到组件的类中。返回值: :新创建
TypeDescriptionProvider
它用于添加指定的属性。
总是有一个新的 TypeDescriptionProvider
在调用该静态方法时创建的实例。在添加更多属性并查询最近添加的属性时,您应该依靠这个新创建的提供商实例。
不隶属于 StackOverflow