TypeDescriptor.AddAttributes() 替换当前属性而不是添加它

2024-01-22

我有这部分代码:

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 替换相同类型的旧属性。我已将AllowMultiple 标记为true。

谁能告诉我这段代码有什么问题吗?
EDIT:
由于某种原因,它只允许添加属性类型的一个属性,我在运行时添加了另一种属性类型并且它起作用了。


事实证明,该属性需要重写 Attribute 类的 TypeId 属性,才能不被视为重复。
See here http://msdn.microsoft.com/en-us/library/6w3a7b50.aspx详细信息,它非常隐藏,也应该在 GetAttributes 中提及。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeDescriptor.AddAttributes() 替换当前属性而不是添加它 的相关文章

随机推荐