Mega Code Archive

 
Categories / C# / Collections Data Structure
 

Retains the elements in the target collection that are contained in the specified collection

#region License and Copyright /*  * Dotnet Commons Collections   *   *  * This library is free software; you can redistribute it and/or modify it   * under the terms of the GNU Lesser General Public License as published by   * the Free Software Foundation; either version 2.1 of the License, or   * (at your option) any later version.  *  * This library is distributed in the hope that it will be useful, but   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License   * for more details.   *  * You should have received a copy of the GNU Lesser General Public License   * along with this library; if not, write to the   * Free Software Foundation, Inc.,   * 59 Temple Place,   * Suite 330,   * Boston,   * MA 02111-1307   * USA   *   */ #endregion using System; using System.Collections; namespace Dotnet.Commons.Lang {     class MainClass{         /// <summary>         /// Retains the elements in the target collection that are contained in the specified collection         /// </summary>         /// <param name="target">Collection where the elements will be removed.</param>         /// <param name="c">Elements to be retained in the target collection.</param>         /// <returns>true</returns>         public static bool RetainAll(System.Collections.ICollection target, System.Collections.ICollection c)         {             System.Collections.IEnumerator e = new System.Collections.ArrayList(target).GetEnumerator();             System.Collections.ArrayList al = new System.Collections.ArrayList(c);             //Reflection. Invoke "retainAll" method for proprietary classes or "Remove" for each element in the collection             System.Reflection.MethodInfo method;             try             {                 method = c.GetType().GetMethod("retainAll");                 if (method != null)                     method.Invoke(target, new System.Object[] { c });                 else                 {                     method = c.GetType().GetMethod("Remove");                     while (e.MoveNext() == true)                     {                         if (al.Contains(e.Current) == false)                             method.Invoke(target, new System.Object[] { e.Current });                     }                 }             }             catch (System.Exception ex)             {                 throw ex;             }             return true;         }    } }