如何获取类的公共可写属性

时间:2015-09-18 15:49:42

标签: c# linq unit-testing reflection system.reflection

How to get all public both get and set properties of a type非常相似

假设我有一个简单的类:

public class MyClass
{
    private int A {get; set;}
    public int B {get; private set;}
    public int C {get; set;}

    public MyClass() {... sets this.A and this.B}
}

使用反射我想要我可以写入值的所有属性的序列。以下是不正确的:

var allWritableProperties = typeof(MyClass).GetProperties()
    .Where(property => property.CanWrite);
  • 方法GetProperties只正确返回公共属性B和C.
  • 属性B有一个私人套装,所以我无法写信给它。
  • 然而B CanWrite是真的,因此Where Function将返回B和C.
  • 我只能写C,所以我只想要C

对于那些想知道我为什么要这样做的人。我有一个实现IEquality的类。我有一个单元测试,测试是否正确实现。最近有人添加了一个属性,但忘了更改Equals功能。因此,一些不同的对象被认为是相同的。我的单元测试应该已经警告过这个。

因此,我想更改测试,以便逐个更改所有公共可写属性,并检查Equals是否返回false。在这种情况下,如果有人添加了公共可写属性但忘记使用等于检查它将失败。

0 个答案:

没有答案