Mega Code Archive

 
Categories / C# / Collections Data Structure
 

Returns the first element contained in both, source and candidates

#region License /*  * Copyright  2002-2005 the original author or authors.  *   * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *   *      http://www.apache.org/licenses/LICENSE-2.0  *   * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ #endregion #region Imports using System; using System.Collections; using System.Reflection; #endregion namespace Spring.Util {     /// <summary>     /// Miscellaneous collection utility methods.     /// </summary>     /// <remarks>     /// Mainly for internal use within the framework.     /// </remarks>     /// <author>Mark Pollack (.NET)</author>     public sealed class CollectionUtils     {         /// <summary>         /// Returns the first element contained in both, <paramref name="source"/> and <paramref name="candidates"/>.         /// </summary>         /// <remarks>The implementation assumes that <paramref name="candidates"/> &lt;&lt;&lt; <paramref name="source"/></remarks>         /// <param name="source">the source enumerable. may be <c>null</c></param>         /// <param name="candidates">the list of candidates to match against <paramref name="source"/> elements. may be <c>null</c></param>         /// <returns>the first element found in both enumerables or <c>null</c></returns>         public static object FindFirstMatch(IEnumerable source, IEnumerable candidates)         {             if (IsEmpty(source) || IsEmpty(candidates))             {                 return null;             }             IList candidateList = candidates as IList;             if (candidateList == null)             {                 if (candidates is ICollection)                 {                     candidateList = new ArrayList((ICollection)candidates);                 }                 else                 {                     candidateList = new ArrayList();                     foreach (object el in candidates)                     {                         candidateList.Add(el);                     }                 }             }             foreach (object sourceElement in source)             {                 if (candidateList.Contains(sourceElement))                 {                     return sourceElement;                 }             }             return null;         }         /// <summary>         /// Determines whether the specified collection is null or empty.         /// </summary>         /// <param name="enumerable">The collection to check.</param>         /// <returns>         ///   <c>true</c> if the specified collection is empty or null; otherwise, <c>false</c>.         /// </returns>         public static bool IsEmpty(IEnumerable enumerable)         {             if (enumerable == null)                 return true;             if (enumerable is ICollection)             {                 return (0 == ((ICollection)enumerable).Count);             }             IEnumerator it = enumerable.GetEnumerator();             if (!it.MoveNext())             {                 return true;             }             return false;         }         /// <summary>         /// Determines whether the specified collection is null or empty.         /// </summary>         /// <param name="collection">The collection to check.</param>         /// <returns>         ///   <c>true</c> if the specified collection is empty or null; otherwise, <c>false</c>.         /// </returns>         public static bool IsEmpty(ICollection collection)         {             return (collection == null || collection.Count == 0);         }         /// <summary>         /// Determines whether the specified dictionary is null empty.         /// </summary>         /// <param name="dictionary">The dictionary to check.</param>         /// <returns>         ///   <c>true</c> if the specified dictionary is empty or null; otherwise, <c>false</c>.         /// </returns>         public static bool IsEmpty(IDictionary dictionary)         {             return (dictionary == null || dictionary.Count == 0);         }    } }