与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);
对于那些想知道我为什么要这样做的人。我有一个实现IEquality的类。我有一个单元测试,测试是否正确实现。最近有人添加了一个属性,但忘了更改Equals功能。因此,一些不同的对象被认为是相同的。我的单元测试应该已经警告过这个。
因此,我想更改测试,以便逐个更改所有公共可写属性,并检查Equals是否返回false。在这种情况下,如果有人添加了公共可写属性但忘记使用等于检查它将失败。