/// <summary> /// Converts the given object to another type. The most common types to convert /// are to and from a string object. The default implementation will make a call /// to ToString on the object if the object is valid and if the destination /// type is string. If this cannot convert to the destination type, this will /// throw a NotSupportedException. /// </summary> public override object?ConvertTo(ITypeDescriptorContext?context, CultureInfo?culture, object?value, Type destinationType) { ArgumentNullException.ThrowIfNull(destinationType); if (destinationType == typeof(InstanceDescriptor) && value is Constraint) { if (value is UniqueConstraint) { UniqueConstraint constr = (UniqueConstraint)value; Reflection.ConstructorInfo ctor = typeof(UniqueConstraint).GetConstructor(new Type[] { typeof(string), typeof(string[]), typeof(bool) }) !; if (ctor != null) { return(new InstanceDescriptor(ctor, new object[] { constr.ConstraintName, constr.ColumnNames, constr.IsPrimaryKey })); } } else { ForeignKeyConstraint constr = (ForeignKeyConstraint)value; System.Reflection.ConstructorInfo ctor = typeof(ForeignKeyConstraint).GetConstructor(new Type[] { typeof(string), typeof(string), typeof(string[]), typeof(string[]), typeof(AcceptRejectRule), typeof(Rule), typeof(Rule) }) !; if (ctor != null) { return(new InstanceDescriptor(ctor, new object[] { constr.ConstraintName, constr.ParentKey.Table.TableName, constr.ParentColumnNames, constr.ChildColumnNames, constr.AcceptRejectRule, constr.DeleteRule, constr.UpdateRule })); } } } return(base.ConvertTo(context, culture, value, destinationType)); }
protected bool ParamsMatchConstructor(Reflection.ConstructorInfo constructor, object[] parameters) { bool matchingResult = true; if (parameters.Length != constructor.Arguments.Length) { return(false); } for (int i = 0; i < parameters.Length && matchingResult; ++i) { matchingResult &= constructor.Arguments[i].Type.IsAssignableFrom( parameters[i].GetType()); } return(matchingResult); }
protected bool TryMatchConstructorWithParams(Reflection.ConstructorInfo[] constructors, object[] parameters, out Reflection.ConstructorInfo foundedConstructor) { foreach (var constructor in constructors) { if (ParamsMatchConstructor(constructor, parameters)) { foundedConstructor = constructor; return(true); } } foundedConstructor = null; return(false); }