Given a PropertyInfo object, how can I check that the setter of the property is public?
Check what you get back from GetSetMethod:
MethodInfo setMethod = propInfo.GetSetMethod(); if (setMethod == null) { // The setter doesn't exist or isn't public. } Or, to put a different spin on Richard's answer:
if (propInfo.CanWrite && propInfo.GetSetMethod(/*nonPublic*/ true).IsPublic) { // The setter exists and is public. } Note that if all you want to do is set a property as long as it has a setter, you don't actually have to care whether the setter is public. You can just use it, public or private:
// This will give you the setter, whatever its accessibility, // assuming it exists. MethodInfo setter = propInfo.GetSetMethod(/*nonPublic*/ true); if (setter != null) { // Just be aware that you're kind of being sneaky here. setter.Invoke(target, new object[] { value }); }
.NET properties are really a wrapping shell around a get and set method.
You can use the GetSetMethod method on the PropertyInfo, returning the MethodInfo referring to the setter. You can do the same thing with GetGetMethod.
These methods will return null if the getter/setter is non-public.
The correct code here is:
bool IsPublic = propertyInfo.GetSetMethod() != null;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With