【问题标题】:Using reflection, how do I detect properties that have setters?使用反射,我如何检测具有设置器的属性?
【发布时间】:2010-08-02 17:48:41
【问题描述】:

我有这段代码循环一个对象并通过反射获取它的所有属性:

foreach (var propertyInfo in typeof(TBase).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
    var oldValue = propertyInfo.GetValue(oldVersion, null);
}

如何进行检查以仅查看具有“设置”的属性? (我想忽略只读值 - 只是“获取”。)

【问题讨论】:

  • 不要忘记带有私有、受保护、内部或内部受保护设置器的属性......那些麻烦制造者。
  • @Dr.Wily'sApprentice 你能解释一下为什么这是必要的吗? (尤其是私有的)我的意思是甚至可以通过反射访问私有字段和属性? - 哇..查了一下..这是可能的。我什么都没说。

标签: c# reflection


【解决方案1】:

PropertyInfo.CanWrite(documentation)

PropertyInfo.GetSetMethod (documentation)

【讨论】:

  • 这肯定会起作用,但您必须对每个属性进行额外检查。通过设置 BindingFlags.SetProperty,您将只检索包含 setter 的属性。
  • 我建议使用 PropertyInfo.GetSetMethod 并检查它是否为空;如果属性上有私有、受保护或内部集,PropertyInfo.CanWrite 方法将返回 true。如果该属性实际上没有设置器,它只会返回 false。
【解决方案2】:
propertyInfo.GetSetMethod() != null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多