public static bool Swap <T>(this HashSet <T> source, int p1, int p2) { if ((p1 == p2) || !(p1 < source.Count() || p2 < source.Count())) { return(false); } var dp = source.ElementAt(p1); return((source.Replace(p1, source.ElementAt(p2)) & source.Replace(p2, dp)) == 1); }