public override bool Equals(object obj) { Term_old t = (Term_old)obj; //Если указан id, то сравниваем по id (состав может отличаться). Такой способ нужен для поиска с неизвестным составом if (this.id == t.id) { return(true); } //Если один из термов не имеет дочерних слов (и id не равны), то термы не равны if (t.childs == null || this.childs == null || t.Count == 0 || this.Count == 0) { return(false); } //Если длины слов не равны то слова не равны if (t.Count != this.Count) { return(false); } //Если тривиальные случаи не сработали, то сравниваем каждое дочернее слово с соответствующим for (int i = 0; i < this.Count; i++) { if (t.childs[i] != this.childs[i]) { return(false); } } return(true); }
/// <summary> /// Проверка наличия дочернего Терма t в данном Терме. /// </summary> /// <param name="t"></param> /// <returns></returns> public bool Contains(Term_old t) { //TODO: оптимизировать поиск без существенных потерь памяти return(childs.Any(c => c.id == t.id)); }