Stubble.Core.Context.Lookup C# (CSharp) Method

Lookup() public method

Looks up a value by name from the context
If ThrowOnDataMiss set then thrown on value not found
public Lookup ( string name ) : object
name string The name of the value to lookup
return object
        public object Lookup(string name)
        {
            object value = null;
            if (Cache.ContainsKey(name))
            {
                value = Cache[name];
            }
            else
            {
                var context = this;
                bool lookupHit = false;
                while (context != null)
                {
                    if (name.IndexOf('.') > 0)
                    {
                        var names = name.Split('.');
                        value = context.view;
                        for (var i = 0; i < names.Length; i++)
                        {
                            var tempValue = GetValueFromRegistry(value, names[i]);
                            if (tempValue != null)
                            {
                                if (i == names.Length - 1)
                                {
                                    lookupHit = true;
                                }

                                value = tempValue;
                            }
                            else if (i > 0)
                            {
                                return null;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    else if (context.view != null)
                    {
                        value = GetValueFromRegistry(context.view, name);
                        if (value != null)
                        {
                            lookupHit = true;
                        }
                    }

                    if (lookupHit || RenderSettings.SkipRecursiveLookup)
                    {
                        break;
                    }

                    context = context.ParentContext;
                }

                value = TryEnumerationConversionIfRequired(value);

                Cache[name] = value;
            }

            if (!RenderSettings.ThrowOnDataMiss || value != null)
            {
                return value;
            }

            var ex = new StubbleDataMissException($"'{name}' is undefined.");
            ex.Data["Name"] = name;
            ex.Data["SkipRecursiveLookup"] = RenderSettings.SkipRecursiveLookup;
            throw ex;
        }