private static void ValidateSettableFieldOrPropertyMember(MemberInfo member, out Type memberType)
{
FieldInfo fi = member as FieldInfo;
if (fi == null)
{
PropertyInfo pi = member as PropertyInfo;
if (pi == null)
{
throw Error.ArgumentMustBeFieldInfoOrPropertyInfo(nameof(member));
}
if (!pi.CanWrite)
{
throw Error.PropertyDoesNotHaveSetter(pi, nameof(member));
}
memberType = pi.PropertyType;
}
else
{
if (fi.DeclaringType == null)
{
throw Error.NotAMemberOfAnyType(fi, nameof(member));
}
memberType = fi.FieldType;
}
}