代码之家  ›  专栏  ›  技术社区  ›  the_drow

TypeDescriptor.AddAttributes()替换添加它的当前属性insead

  •  1
  • the_drow  · 技术社区  · 14 年前

    我有这部分代码:

    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. 出于某种原因,of type返回一个空的IEnumerable,尽管它应该返回该类型的正确属性,我选中了。它们存在。
    2. 我把所有的都标为真。


    编辑:

    2 回复  |  直到 14 年前
        1
  •  1
  •   James Dunne    14 年前

    我认为你的问题是因为你忽略了 TypeDescriptionProvider AddAttributes 打电话来。

    从反射器打开 TypeDescriptor.AddAttributes

    将类级别属性添加到

    参数

    类型 :的 Type 目标组件的。

    属性 :数组 Attribute 要添加到组件类的对象。

    返回值 :新创建的 类型描述提供程序

    总会有新的 类型描述提供程序 调用该静态方法时创建的实例。在添加更多属性和查询最近添加的属性时,您应该依赖于这个新创建的提供程序实例。

        2
  •  1
  •   the_drow    14 年前

    结果发现,该属性需要重写属性类的TypeId属性,以使其不被视为重复的。
    here