Проверьте, что вы получаете от GetSetMethod
:
MethodInfo setMethod = propInfo.GetSetMethod();
if (setMethod == null)
{
// The setter doesn't exist or isn't public.
}
Или, чтобы поставить другое вращение на Ответ Ричарда :
if (propInfo.CanWrite && propInfo.GetSetMethod(/*nonPublic*/ true).IsPublic)
{
// The setter exists and is public.
}
Обратите внимание, что если все, что вы хотите сделать, это установить свойство, если оно имеет установщик, вам на самом деле не нужно заботиться о том, является ли установщик общедоступным.Вы можете просто использовать его, общедоступный или 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 });
}