private static void ValidateSettableFieldOrPropertyMember(MemberInfo member, out Type memberType)
{
Type?decType = member.DeclaringType;
if (decType == null)
{
throw Error.NotAMemberOfAnyType(member, nameof(member));
}
// Null paramName as there are two paths here with different parameter names at the API
TypeUtils.ValidateType(decType, null);
switch (member)
{
case PropertyInfo pi:
if (!pi.CanWrite)
{
throw Error.PropertyDoesNotHaveSetter(pi, nameof(member));
}
memberType = pi.PropertyType;
break;
case FieldInfo fi:
memberType = fi.FieldType;
break;
default:
throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member));
}
}