/// <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)); }