private EnumerablesComparison( IResolver resolver, ArrayComparisonEmitter arrayComparisonEmitter, EmitCheckIfLoopsAreDoneDelegate emitCheckIfLoopsAreDone, IConfigurationProvider configuration, IVariable variable) { _resolver = resolver; _arrayComparisonEmitter = arrayComparisonEmitter; _emitCheckIfLoopsAreDone = emitCheckIfLoopsAreDone; _configuration = configuration; _variable = variable; var variableType = variable.VariableType; _elementType = variableType .FindGenericInterface(typeof(IEnumerable <>)) .GetGenericArguments() .Single(); _getEnumeratorMethod = variableType.FindMethod(nameof(IEnumerable.GetEnumerator), Type.EmptyTypes); _enumeratorType = _getEnumeratorMethod.ReturnType; _moveNextMethod = _enumeratorType.FindMethod(nameof(IEnumerator.MoveNext), Type.EmptyTypes); _getCurrentMethod = _enumeratorType.GetPropertyGetter(nameof(IEnumerator.Current)); }
public ArrayComparisonEmitter( IResolver resolver, EmitCheckIfLoopsAreDoneDelegate emitCheckIfLoopsAreDone, EmitReferenceComparisonDelegate emitReferenceComparison) { _resolver = resolver; _emitCheckIfLoopsAreDone = emitCheckIfLoopsAreDone; _emitReferenceComparison = emitReferenceComparison; }
public static EnumerablesComparison Create( IResolver comparisons, ArrayComparisonEmitter arrayComparisonEmitter, EmitCheckIfLoopsAreDoneDelegate emitCheckIfLoopsAreDone, IConfigurationProvider configuration, IVariable variable) { var variableType = variable.VariableType; if (variableType.ImplementsGenericInterface(typeof(IEnumerable <>)) && !variableType.IsArray) { return(new EnumerablesComparison(comparisons, arrayComparisonEmitter, emitCheckIfLoopsAreDone, configuration, variable)); } return(null); }