private ExpressionSingleNode Evaluate(ExpressionSingleNode node) { if (node != null) { if (node is ExpressionTripletNode) { var triplet = node as ExpressionTripletNode; triplet.First = Evaluate(triplet.First); triplet.Second = Evaluate(triplet.Second); } else if (node.Value is ExpressionSingleNode) node.Value = Evaluate((ExpressionSingleNode) node.Value); else if (node.Value != null && node.Contains(FullKey)) node.Value = KeyValue ?? string.Empty; } return node; }
public static List<object> ExtractValue(ExpressionSingleNode node) { List<object> values = new List<object>(); if (node != null) { values.Add(node.Name); if (node is ExpressionTripletNode) { var triplet = node as ExpressionTripletNode; values.AddRange(ExtractValue(triplet.First)); values.AddRange(ExtractValue(triplet.Second)); } else if (node.Value is ExpressionSingleNode) values.AddRange(ExtractValue((ExpressionSingleNode) node.Value)); else if (node.Value != null) values.Add(node.Value); } return values; }