public override bool Equals(object obj) { var c = obj as ConstructorInfoEx; if (c != null) { return(_Constructor.Equals(c._Constructor)); } return(_Constructor.Equals(obj)); }
public override bool Equals(object obj) { DelegatingConstructorInfo other = obj as DelegatingConstructorInfo; if (other != null) { return(m_constructorImpl.Equals(other.m_constructorImpl)); } else { return(m_constructorImpl.Equals(obj)); } }
private bool IsConstructorMatching(ConstructorInfo x, List <Type> types) { var pars = x.GetParameters().Select(x => x.ParameterType).ToList(); foreach (var parType in pars) { if (!types.Any(x => x.Equals(parType))) { return(false); } } return(true); }
public void EqualsTest(ConstructorInfo constructorInfo1, ConstructorInfo constructorInfo2, bool expected) { Assert.Equal(expected, constructorInfo1.Equals(constructorInfo2)); Assert.NotEqual(expected, constructorInfo1 != constructorInfo2); }
private object CoerceList(Type targetType, Type arrayType, IEnumerable value) { if (targetType.IsArray) { return(this.CoerceArray(targetType.GetElementType(), value)); } // targetType serializes as a JSON array but is not an array // assume is an ICollection / IEnumerable with AddRange, Add, // or custom Constructor with which we can populate it // many ICollection types take an IEnumerable or ICollection // as a constructor argument. look through constructors for // a compatible match. ConstructorInfo[] ctors = targetType.GetConstructors(); ConstructorInfo defaultCtor = null; foreach (ConstructorInfo ctor in ctors) { ParameterInfo[] paramList = ctor.GetParameters(); if (paramList.Length == 0) { // save for in case cannot find closer match defaultCtor = ctor; continue; } if (paramList.Length == 1 && TCU.GetTypeInfo(paramList[0].ParameterType).IsAssignableFrom(TCU.GetTypeInfo(arrayType))) { try { // invoke first constructor that can take this value as an argument return(ctor.Invoke( new object[] { value } )); } catch { // there might exist a better match continue; } } } if (ConstructorInfo.Equals(defaultCtor, null)) { throw new JsonTypeCoercionException( String.Format(TypeCoercionUtility.ErrorDefaultCtor, new System.Object[] { targetType.FullName })); } object collection; try { // always try-catch Invoke() to expose real exception collection = defaultCtor.Invoke(null); } catch (TargetInvocationException ex) { if (ex.InnerException != null) { throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException); } throw new JsonTypeCoercionException("Error instantiating " + targetType.FullName, ex); } // many ICollection types have an AddRange method // which adds all items at once #if WINDOWS_STORE /** \todo Not sure if this finds the correct methods */ MethodInfo method = TCU.GetTypeInfo(targetType).GetDeclaredMethod("AddRange"); #else MethodInfo method = TCU.GetTypeInfo(targetType).GetMethod("AddRange"); #endif ParameterInfo[] parameters = (MethodInfo.Equals(method, null)) ? null : method.GetParameters(); Type paramType = (parameters == null || parameters.Length != 1) ? null : parameters[0].ParameterType; if (!Type.Equals(paramType, null) && TCU.GetTypeInfo(paramType).IsAssignableFrom(TCU.GetTypeInfo(arrayType))) { try { // always try-catch Invoke() to expose real exception // add all members in one method method.Invoke( collection, new object[] { value }); } catch (TargetInvocationException ex) { if (ex.InnerException != null) { throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException); } throw new JsonTypeCoercionException("Error calling AddRange on " + targetType.FullName, ex); } return(collection); } else { // many ICollection types have an Add method // which adds items one at a time #if WINDOWS_STORE /** \todo Not sure if this finds the correct methods */ method = TCU.GetTypeInfo(targetType).GetDeclaredMethod("Add"); #else method = TCU.GetTypeInfo(targetType).GetMethod("Add"); #endif parameters = (MethodInfo.Equals(method, null)) ? null : method.GetParameters(); paramType = (parameters == null || parameters.Length != 1) ? null : parameters[0].ParameterType; if (!Type.Equals(paramType, null)) { // loop through adding items to collection foreach (object item in value) { try { // always try-catch Invoke() to expose real exception method.Invoke( collection, new object[] { this.CoerceType(paramType, item) }); } catch (TargetInvocationException ex) { if (ex.InnerException != null) { throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException); } throw new JsonTypeCoercionException("Error calling Add on " + targetType.FullName, ex); } } return(collection); } } try { // fall back to basics return(Convert.ChangeType(value, targetType)); } catch (Exception ex) { throw new JsonTypeCoercionException(String.Format("Error converting {0} to {1}", new System.Object[] { value.GetType().FullName, targetType.FullName }), ex); } }
public void Equals(ConstructorInfo constructorInfo1, ConstructorInfo constructorInfo2, bool expected) { Assert.Equal(expected, constructorInfo1.Equals(constructorInfo2)); }
public override bool Equals(object obj) => _ci.Equals(obj);