我有一部分代码:

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

它有两个问题:

  1. 由于某种原因,Oftype返回一个空的Ienumerable,尽管它应该返回该类型的正确属性,然后我检查了。它们存在。
  2. 这是严重的问题。而不是添加属性,而是用crmtypeattribute代替同一类型的旧属性。 我已经明显允许的变态是真实的。

谁能告诉我此代码怎么了?
编辑:
由于某种原因,它仅允许添加一个属性类型的一个属性,我在运行时添加了另一个属性类型,并且可以使用。

有帮助吗?

解决方案 2

事实证明,属性需要覆盖属性类的TypeID属性以不被重复处理。
这里 有关详细信息,它非常隐藏,也应该在GetAttibutes中提及。

其他提示

我认为您的问题源于您无视返回的事实 TypeDescriptionProvider 来自 AddAttributes 称呼。

从反射器上 TypeDescriptor.AddAttributes:

将类级属性添加到目标组件类型中。

参数

类型: : 这 Type 目标组件的。

属性: :一系列 Attribute 对象添加到组件的类中。

返回值: :新创建 TypeDescriptionProvider 它用于添加指定的属性。

总是有一个新的 TypeDescriptionProvider 在调用该静态方法时创建的实例。在添加更多属性并查询最近添加的属性时,您应该依靠这个新创建的提供商实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top