private void AddToResourceFinder(IResource toAdd) { string[] makeResourceParts(IResource resource) { switch (resource) { case var _ when resource.IsInternal: return(new[] { resource.Name }); case var _ when resource.IsInnerResource: var dots = resource.Name.Count('.'); return(resource.Name.Split(new[] { '.' }, dots)); default: return(resource.Name.Split('.')); } } var parts = makeResourceParts(toAdd); for (var i = 0; i < parts.Length; i += 1) { var key = string.Join(".", parts.Skip(i)); if (ResourceFinder.ContainsKey(key)) { ResourceFinder[key] = null; } else { ResourceFinder[key] = toAdd; } } }