private static bool ParseLambda(Stream stream, ShadowClass shadowClass, ref string template) { if (stream.Current == '$') { var identifier = stream.PeekWord(1); if (identifier != null) { var filter = stream.PeekBlock(identifier.Length + 2, '(', ')'); if (filter != null && stream.Peek(filter.Length + 2 + identifier.Length + 1) == '[') { try { var index = filter.IndexOf("=>", StringComparison.Ordinal); if (index > 0) { var name = filter.Substring(0, index); var contextName = identifier; // Todo: Make the TemplateCodeParser context aware if (contextName == "GenericTypeArguments") contextName = "Types"; else if (contextName.StartsWith("Nested")) contextName = contextName.Remove(0, 6); var type = Contexts.Find(contextName)?.Type.FullName; if (type == null) return false; var methodIndex = counter++; shadowClass.AddLambda(filter, type, name, methodIndex); stream.Advance(filter.Length + 2 + identifier.Length); template += $"${identifier}($__{methodIndex})"; return true; } } catch { } } } } return false; }