/// <summary> /// Returns <see langword="true" /> if the set contains all the elements in the specified collection. /// </summary> /// <param name="c">A collection of objects.</param> /// <returns><see langword="true" /> if the set contains all the elements in the specified collection, <see langword="false" /> otherwise.</returns> public override sealed bool ContainsAll(ICollection c) { Set temp; lock (c.SyncRoot) { temp = new HybridSet(c); } lock (mSyncRoot) { return(mBasisSet.ContainsAll(temp)); } }
/// <summary> /// Retains only the elements in this set that are contained in the specified collection. /// </summary> /// <param name="c">Collection that defines the set of elements to be retained.</param> /// <returns><see langword="true" /> if this set changed as a result of this operation.</returns> public override bool RetainAll(ICollection c) { //Put data from C into a set so we can use the Contains() method. Set cSet = new HybridSet(c); //We are going to build a set of elements to remove. Set removeSet = new HybridSet(); foreach (object o in this) { //If C does not contain O, then we need to remove O from our //set. We can't do this while iterating through our set, so //we put it into RemoveSet for later. if (!cSet.Contains(o)) { removeSet.Add(o); } } return(this.RemoveAll(removeSet)); }