using System.Collections.Generic;
Dictionary<string, Type> seedDataDictionary = new()
[nameof(Int32)] = typeof(int),
[nameof(Object)] = typeof(object),
[nameof(String)] = typeof(string),
[nameof(Boolean)] = typeof(bool)
seedDataDictionary = seedDataDictionary
.OrderBy(x => x.Key.Length)
.ToDictionary(x => x.Key, x => x.Value);
string keysConcat = string.Join("", seedDataDictionary.Keys);
List<int> keyOffsets = new();
List<int> keyLengths = new();
List<Type> values = new();
foreach (var pair in seedDataDictionary)
keyOffsets.Add(keyOffset);
keyLengths.Add(pair.Key.Length);
keyOffset += pair.Key.Length;
public static class StaticLookupTable
public static bool TryFind(ReadOnlySpan<char> key, out Type value)
ReadOnlySpan<char> keysConcat = "{{keysConcat}}";
ReadOnlySpan<int> keyOffsets = [{{string.Join(", ", keyOffsets)}}];
ReadOnlySpan<int> keyLengths = [{{string.Join(", ", keyLengths)}}];
ReadOnlySpan<Type> values = [typeof({{string.Join("), typeof(", values)}})];
int foundOffset = searchStart + keysConcat[searchStart..].IndexOf(key);
int keyIndex = keyOffsets.IndexOf(foundOffset);
if (key.Length != keyLengths[keyIndex])
if (keyIndex + 1 >= keyOffsets.Length)
searchStart = keyOffsets[keyIndex + 1];
value = values[keyIndex];