使用Reflection获取PropertyInfo,只希望看到具有赋值函数的访问器

本文关键字:赋值 函数 访问 获取 Reflection PropertyInfo 希望 使用 | 更新日期: 2023-09-27 18:20:31

使用反射,我只想检索同时具有getset方法的属性,而忽略仅具有get的属性。我想做的是给用户一个他/她可以更改的变量列表,所以向他们显示只有get方法的属性是有误导性的。

给定下面的代码,用户将只显示Name。或者我可以给他们两个都看,但UniqueID变灰了,这样他们就知道无法更改。

public Int64 UniqueID
{
    get { return this.uniqueID; }
}
public String Name
{
    get { return this.name; }
    set { this.name = value; }
}

背景信息:我使用的是C#4.0。

使用Reflection获取PropertyInfo,只希望看到具有赋值函数的访问器

您可以使用CanReadCanWrite属性:

Type type = ...
var readWriteProps = type.GetProperties()
                         .Where(p => p.CanRead && p.CanWrite); 

请注意,上面的查询只查找具有公共访问器的公共属性。

我认为您要查找的属性是PropertyInfo.CanWrite,这可以通过以下方式实现,以使用以下内容检查Get和Set:

if (propInfo.CanWrite && propInfo.CanRead)