2012-01-15 70 views
2

使用反射我想只提取既有getset方法的属性,并只用get忽略那些存取。我想要做的是给用户一个他/她能够改变的变量列表,因此向他们显示只有get方法的属性是误导性的。使用反射来获得的PropertyInfo,只希望看到有改变者

给出以下代码,用户只会显示Name。或者我可以向他们展示他们两个,但灰色UniqueID,所以他们知道他们不能改变它。

public Int64 UniqueID 
{ 
    get { return this.uniqueID; } 
} 

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

背景信息:我正在使用C#4.0。

回答

4

您可以使用CanReadCanWrite属性:

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

请注意,上面的查询只查找与公众存取公共属性。

+0

这工作很好,谢谢。我会投票给你,但我没有足够的代表来这样做。 – 2012-01-15 06:50:59

3

我认为你正在寻找的属性为PropertyInfo.CanWrite,这可以被实现为以下检查get和set的东西,如:

if (propInfo.CanWrite && propInfo.CanRead)