2

使用反射我只想检索同时具有 aget和 aset方法的属性,并忽略只有 a的属性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。

4

2 回答 2

4

您可以使用CanReadCanWrite属性:

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

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

于 2012-01-15T06:26:40.300 回答
3

我认为您正在寻找的属性是PropertyInfo.CanWrite,这可以实现如下,以检查 Get 和 Set 类似的东西:

if (propInfo.CanWrite && propInfo.CanRead)
于 2012-01-15T06:27:14.607 回答