/// <summary> /// Evaluates the node, using the variables provided in the <paramref name="Variables"/> collection. /// </summary> /// <param name="Variables">Variables collection.</param> /// <returns>Result.</returns> public override IElement Evaluate(Variables Variables) { IElement E = this.Argument.Evaluate(Variables); object Obj = E.AssociatedObjectValue; IPropertyEnumerator Enumerator = GetEnumerator(Obj.GetType()); return(Enumerator?.EnumerateProperties(Obj) ?? ObjectValue.Null); }
private static IPropertyEnumerator GetEnumerator(Type T) { lock (enumerators) { if (enumerators.TryGetValue(T, out IPropertyEnumerator Enumerator)) { return(Enumerator); } } IPropertyEnumerator Best = Types.FindBest <IPropertyEnumerator, Type>(T); lock (enumerators) { enumerators[T] = Best; } return(Best); }