Exemple #1
0
        /// <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));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }