static Type GetMemberType(Type objectType, TypeAccessor accessor, string property) { return(MemberTypes.GetOrAdd(objectType, _ => new ConcurrentDictionary <string, Type>()) .GetOrAdd(property, _ => { var member = GetMemberOrThrow(objectType, accessor, property); return member.Type; })); }