Exemplo n.º 1
0
        /// <summary>
        /// Test whether the constraint is satisfied by a given value
        /// </summary>
        /// <param name="actual">The value to be tested</param>
        public override ConstraintResult ApplyTo <TActual>(TActual actual)
        {
            Guard.ArgumentNotNull(actual, nameof(actual));

            object indexedValue;
            var    actualType = actual as Type ?? actual.GetType();

            if (actualType.IsArray)
            {
                var array = actual as Array;
                indexedValue = array?.GetValue(_arguments.Cast <int>().ToArray());
            }
            else
            {
                var getMethod = Reflect.GetDefaultIndexer(actualType, _argumentTypes) ?? throw new ArgumentException($"Default indexer accepting arguments {MsgUtils.FormatCollection(_arguments)} was not found on {actualType}.");

                indexedValue = Reflect.InvokeMethod(getMethod, actual, _arguments);
            }

            return(BaseConstraint.ApplyTo(indexedValue));
        }