private Context GetOrCreateChildEnvironment(Context environment, string envname) { var names = envname.Split('.'); foreach (var name in names) { var result = environment.GetValue(name); if (result != null) environment = (Context)result; else { var context = new Context(environment); environment.SetValue(name, context); environment = context; } } return environment; }