我已经从codeproject中的set
中获取了代码。如果Phone
不等于QRType
或Contact
(QRType是枚举),我会尝试将属性设为Phone
:
public QRType Type
{
get { return type; }
set
{
type = value;
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(GetType())["Phone"];
ReadOnlyAttribute attribute = (ReadOnlyAttribute)
descriptor.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo fieldToChange = attribute.GetType().GetField("isReadOnly",
BindingFlags.NonPublic |
BindingFlags.Instance);
bool v = (type != QRType.Contact && type != QRType.Phone);
fieldToChange.SetValue(attribute, v );
}
}
以上代码无法正常工作,并且“电话”字段始终显示为灰色,同时设置值如下:
fieldToChange.SetValue(attribute, true );
fieldToChange.SetValue(attribute, false );
两者都正常工作。这有什么问题?
更新
有趣的是,如果不使用&&
,它就可以了:
fieldToChange.SetValue(attribute, type != QRType.Contact);