/// <summary> /// Clones the instance using special context and returns cloned instance. /// </summary> /// <param name="context">Special context for providing references continuity.</param> /// <returns>Cloned instance.</returns> public LinguisticVariable Clone(Dictionary <object, object> context) { if (context.ContainsKey(this)) { return((LinguisticVariable)context[this]); } var result = new LinguisticVariable(); context[this] = result; result.Name = Name.Clone(context); result.Range = Range?.Clone(context); result.Constraint = Constraint?.Clone(context); result.Values = Values?.Select(p => p.Clone(context)).ToList(); result.Operators = Operators?.Select(p => p.Clone(context)).ToList(); result.CodeEntity = CodeEntity.Clone(context); result.AppendAnnotations(this, context); return(result); }