private static bool RecursiveGet( EntryList list, ResourceUri uri, int segmentIndex, [MaybeNullWhen(false)] out Entry entry) { string segment = uri.Segments[segmentIndex]; // Only try to get values when we're at the last segment. if (segmentIndex == uri.Segments.Length - 1) { if (list.Names.TryGetValue(segment, out var nameEntry)) { entry = nameEntry; return(true); } if (list.Values.TryGetValue(segment, out var valueEntry)) { entry = valueEntry; return(true); } } // If getting a value fails, we fallback and try to return a list. if (list.SubLists.TryGetValue(segment, out var listEntry)) { if (segmentIndex + 1 >= uri.Segments.Length) { entry = null; return(false); } return(RecursiveGet(listEntry, uri, segmentIndex + 1, out entry)); } entry = default; return(false); }
public bool TryGet(ResourceUri uri, [MaybeNullWhen(false)] out Entry entry) { return(RecursiveGet(this, uri, segmentIndex: 0, out entry)); }