【问题标题】:PropertyInfo : is the property an indexer?PropertyInfo : 属性是索引器吗?
【发布时间】:2011-01-20 10:52:00
【问题描述】:

我有以下代码:

PropertyInfo[] originalProperties = myType.GetProperties();

我想从originalProperties 中排除所有索引器(myVar["key"] 显示为名为“Item”的属性)。

正确的方法是什么?

排除 propInfo.Name == "Item" 不是选项的所有属性。

【问题讨论】:

    标签: c# .net reflection propertyinfo


    【解决方案1】:

    调用PropertyInfo.GetIndexParameters - 如果返回的数组为空,则它不是索引器。

    【讨论】:

    • 嗯......这可能有效,但它是相当沉重的。必须有一种“更轻松”的方式来获取这些信息。
    • @Eniola:我不明白为什么“必须”采用更轻(我假设您的意思是更有效)的方式。如果您经常这样做并且关心性能,我建议您缓存结果。
    • 是的,这就是工会的现状。所以我们必须缓存。如果我们调整 .NET 运行时以将该标志显式添加到元数据中,这样就不会产生太大的影响。因为我的场景涉及重写 WebApi 中返回的对象以包含 href 值;这涉及检查许多类型的许多属性。那么,考虑到内存使用会迅速增长,你会缓存什么以及放弃什么?
    • @Eniola:这感觉与 7 年前提出的问题有些不同。您可能想问一个新的、具体的问题。
    • @Eniola:结果似乎已经被缓存了,最新的reference source
    【解决方案2】:

    另一种选择是使用:

    myType.GetProperties().Except(myType.GetDefaultMembers().OfType<PropertyInfo>());
    

    GetDefaultMembers 将返回所有编译器生成的 C# 索引器。这样做的好处是不需要反映每个单独的属性来找出哪些是索引器。

    这可能不是所有允许的 .NET 框架语言的通用解决方案,但我目前不知道有任何反例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2019-01-08
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多