public IMultiLink GetLinked(IMultiLink unlinkedLink) { var id = unlinkedLink.TargetId; IRootLink rootLink; if (RootLinks.TryGetValue(id, out rootLink)) { return(new EntryMultiLink(rootLink)); } IEntryLink entryLink; if (EntryLinks.TryGetValue(id, out entryLink)) { return(new EntryMultiLink(entryLink)); } IGroupLink groupLink; if (GroupLinks.TryGetValue(id, out groupLink)) { return(new GroupMultiLink(groupLink)); } IProfileLink profileLink; if (ProfileLinks.TryGetValue(id, out profileLink)) { return(new ProfileMultiLink(profileLink)); } IRuleLink ruleLink; if (RuleLinks.TryGetValue(id, out ruleLink)) { return(new RuleMultiLink(ruleLink)); } throw new ArgumentException( $"Link target not found. {nameof(unlinkedLink.TargetId)}='{unlinkedLink.TargetId}'", nameof(unlinkedLink)); }