我有一个场景,我必须找出由PropertyInfo
表示的特定属性是否具有编译器生成的支持字段。我需要这些信息来了解房产是否明确"计算。
我不能简单地使用GetSetMethod(true) != null
条件,因为C#6引入了仅具有getter的属性,它似乎给出了null,但我仍然无法将它们视为计算。
例如
public class Test {
public bool A { get; set; } // has a backing field, should give computed = false
public int B { get; private set; } // has a backing field,should give computed = false
public int C { get; } // has a backing field,should give computed = false;
public bool D { get { return B + C > 10; } } // doesn't have backing field, should give computed = true
private int _e = 1;
public int E { get { return _e; } } // has an explicit backing field, so in this sense it should give computed = true
public Test() {
B = 3;
C = 5;
}
}
我想写一个小扩展方法,比如这个
public static bool IsComputed(this PropertyInfo propertyInfo) {
...
}
修改
为了更清楚,在C#6之前,我使用简单的GetSetMethod(true) == null
条件来处理属性"计算"。但是现在只有吸气剂的属性(有时用作私人吸气剂的替代品)会弄乱它,因为他们给出了null
,因为他们没有设定方法,但他们不应该这样做被视为计算。