Почему вы не используете Linq to XML?
В противном случае создайте массив значений ключа и используйте его для выделения в качестве ключа.
Edit:
Ваше отличие на InnerText - это правильное значение? Попробуйте сначала отличить, а затем выберите innerText.
Попробуйте
var topicNodes = xdoc.SelectNodes("//content:Topic", nsmgr).Cast<XmlNode>()**.Distinct()**.Select(c => c.InnerText).ToList();
Edit2:
Используйте этот метод:
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> knownKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
Вы должны выбрать поле ведьмы, которое хотели бы выделить. XmlNode с тем же идентификатором - это не тот же объект!