Ejemplo n.º 1
0
        /// <summary>
        /// Compares two dictionaries for equality.
        /// This method should be used when the dictionary values are enumerable and where the elements
        /// should be compared given a <see cref="EnumerableEqualityComparerStrategy"/>.
        /// </summary>
        /// <typeparam name="TKey">The type of keys in the dictionaries.</typeparam>
        /// <typeparam name="TElementValue">The dictionaries values' element type.</typeparam>
        /// <param name="first">The first <see cref="IReadOnlyDictionary{TKey, TValue}"/> to compare.</param>
        /// <param name="second">The second <see cref="IReadOnlyDictionary{TKey, TValue}"/> to compare.</param>
        /// <param name="keyComparer">Optional equality comparer to use to compare keys.  Default is to use <see cref="EqualityComparer{TKey}.Default"/>.</param>
        /// <param name="enumerableEqualityComparerStrategy">The strategy to use when comparing the elements of the dictionaries enumerable values.</param>
        /// <returns>
        /// - true if the two source dictionaries are null.
        /// - false if one or the other is null.
        /// - true if the two dictionaries are of equal length and their corresponding elements are equal according to the specified equality comparer for their type (both keys and values, ordered by key).
        /// - otherwise, false.
        /// </returns>
        public static bool DictionaryEqualHavingEnumerableValues <TKey, TElementValue>(
            this IReadOnlyDictionary <TKey, IReadOnlyList <TElementValue> > first,
            IReadOnlyDictionary <TKey, IReadOnlyList <TElementValue> > second,
            IEqualityComparer <TKey> keyComparer = null,
            EnumerableEqualityComparerStrategy enumerableEqualityComparerStrategy = EnumerableEqualityComparerStrategy.SequenceEqual)
        {
            var result = DictionaryEqualHavingEnumerableValues <TKey, IReadOnlyList <TElementValue>, TElementValue>(first, second, keyComparer, enumerableEqualityComparerStrategy);

            return(result);
        }
Ejemplo n.º 2
0
        private static bool DictionaryEqualHavingEnumerableValues <TKey, TValue, TElementValue>(
            this IReadOnlyDictionary <TKey, TValue> first,
            IReadOnlyDictionary <TKey, TValue> second,
            IEqualityComparer <TKey> keyComparer = null,
            EnumerableEqualityComparerStrategy enumerableEqualityComparerStrategy = EnumerableEqualityComparerStrategy.SequenceEqual)
        {
            if (keyComparer == null)
            {
                keyComparer = EqualityComparer <TKey> .Default;
            }

            var valueComparer = (IEqualityComparer <TValue>) new EnumerableEqualityComparer <TElementValue>(enumerableEqualityComparerStrategy);

            var result = DictionaryEqual(first, second, keyComparer, valueComparer);

            return(result);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="EnumerableEqualityComparer{T}"/> class.
 /// </summary>
 /// <param name="enumerableEqualityComparerStrategy">The strategy to use when comparing two <see cref="IEnumerable{T}"/> for equality.</param>
 public EnumerableEqualityComparer(
     EnumerableEqualityComparerStrategy enumerableEqualityComparerStrategy = EnumerableEqualityComparerStrategy.SequenceEqual)
 {
     this.enumerableEqualityComparerStrategy = enumerableEqualityComparerStrategy;
 }