Returns the first element contained in both source IEnumerable and target IEnumerable - CSharp System.Collections.Generic

CSharp examples for System.Collections.Generic:IEnumerable

Description

Returns the first element contained in both source IEnumerable and target IEnumerable

Demo Code

/*// ww w .ja  va  2s .  c  o m
 * Copyright ? 2002-2011 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.
 */
using System.Reflection;
using System.Collections;
using System;

public class Main{
        /// <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>
        /// Adds the specified <paramref name="element"/> to the specified <paramref name="enumerable"/> .
        /// </summary>
        /// <param name="enumerable">The enumerable to add the element to.</param>
        /// <param name="element">The object to add to the collection.</param>
        public static void Add(IEnumerable enumerable, object element)
        {
            if (enumerable == null)
            {
                throw new ArgumentNullException("enumerable", "Collection cannot be null.");
            }
            if (enumerable is IList)
            {
                ((IList)enumerable).Add(element);
                return;
            }
            MethodInfo method;
            method = enumerable.GetType().GetMethod("add", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public);
            if (null == method)
            {
                throw new InvalidOperationException("Enumerable type " + enumerable.GetType() + " does not implement a Add() method.");
            }
            method.Invoke(enumerable, new Object[] { element });
        }
        /// <summary>
        /// Adds the specified <paramref name="element"/> to the specified <paramref name="collection"/> .
        /// </summary>
        /// <param name="collection">The collection to add the element to.</param>
        /// <param name="element">The object to add to the collection.</param>
        public static void Add(ICollection collection, object element)
        {
            Add((IEnumerable)collection, element);
        }
        /// <summary>
        /// Determines whether the <paramref name="collection"/> contains the specified <paramref name="element"/>.
        /// </summary>
        /// <param name="collection">The collection to check.</param>
        /// <param name="element">The object to locate in the collection.</param>
        /// <returns><see lang="true"/> if the element is in the collection, <see lang="false"/> otherwise.</returns>
        public static bool Contains(IEnumerable collection, Object element)
        {
            if (collection == null)
            {
                return false;
            }

            if (collection is IList)
            {
                return ((IList) collection).Contains(element);
            }

            if (collection is IDictionary)
            {
                return ((IDictionary) collection).Contains(element);
            }

            MethodInfo method = collection.GetType().GetMethod("contains", BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public);
            if (null != method)
            {
                return (bool)method.Invoke(collection, new Object[] { element });
            }
            foreach (object item in collection)
            {
                if (object.Equals(item, element))
                {
                    return true;
                }
            }
            return false;
        }
}

Related Tutorials