如何反射性地判断属性是否有公共 setter

6
我正在将一个对象模型保存为XML文件,但是当我加载它时,当我尝试使用PropertyInfo.SetValue()时会出现异常,因为该属性没有setter,只有getter。
我想要的是要么不保存只有getter的属性,要么在加载时确定是否可以尝试设置值。
有人知道如何做到这一点吗?
谢谢。
2个回答

11
您可以使用PropertyInfo.GetSetMethod - 如果属性是只读或设置器不公开,则此方法将返回null
if (property.GetSetMethod() != null)
{
    // Yup, you can write to it.
}

如果你可以接受一个非公共的setter,你可以使用:

if (property.GetSetMethod(true) != null)
{
    // Yup, there's a setter - but it may be private
}

2

2
请注意,即使是非公共的setter方法,此代码也将返回true。 - Dan Bryant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接