protected virtual QualifiedMember CreateRuntimeTypedMember(Type runtimeType) { var newMemberChain = new Member[Depth]; for (var i = 0; i < Depth - 1; i++) { newMemberChain[i] = MemberChain[i]; } newMemberChain[Depth - 1] = LeafMember.WithType(runtimeType); return(CreateFinalMember(new QualifiedMember(newMemberChain, this))); }
public QualifiedMember WithType(Type runtimeType) { if (runtimeType == Type) { return(this); } var runtimeTypedMember = _runtimeTypedMemberCache.GetOrAdd(runtimeType, rt => { var newMemberChain = new Member[_memberChain.Length]; for (var i = 0; i < _memberChain.Length - 1; i++) { newMemberChain[i] = _memberChain[i]; } newMemberChain[_memberChain.Length - 1] = LeafMember.WithType(rt); return(new QualifiedMember(newMemberChain, this)); }); return(runtimeTypedMember); }