public void GenerateTrace(object source, object target, object concept, string metaScaffold, string scaffold) { Term currentTerm; if (_innerLoop.Count == 0) { currentTerm = this; } else { currentTerm = _innerLoop[_innerLoop.Count - 1].Target as Term; if (currentTerm == null) { return; } } Term cloneTerm = currentTerm.Clone(); List <object> lst; bool isFound = cloneTerm.SearchList(source, out lst); if (isFound) { Debug.Assert(lst != null); var index = lst.FindIndex(x => x.Equals(source)); lst[index] = target; object objj = cloneTerm.ReConstruct(); var ts = new TraceStep(currentTerm, objj, concept, metaScaffold, scaffold); _innerLoop.Add(ts); } else { var targetTerm = target as Term; if (targetTerm != null) { object objj = targetTerm.ReConstruct(); var ts = new TraceStep(currentTerm, objj, concept, metaScaffold, scaffold); _innerLoop.Add(ts); } else { var ts = new TraceStep(currentTerm, target, concept, metaScaffold, scaffold); _innerLoop.Add(ts); } } }