ArgumentMemberNotDeclOnType() статический приватный Метод

ArgumentException with message like " The member '{0}' is not declared on type '{1}' being created"
static private ArgumentMemberNotDeclOnType ( object p0, object p1, string paramName ) : Exception
p0 object
p1 object
paramName string
Результат System.Exception
        /// <summary>
        /// Creates a <see cref="WithCSharpExpression"/> that represents a with expression applied to an anonymous type.
        /// </summary>
        /// <param name="object">The expression representing the object to clone and mutate.</param>
        /// <param name="members">The members of the anonymous type in the order of their assignment by the constructor parameters.</param>
        /// <param name="initializers">The initializers used to mutate the cloned object.</param>
        /// <returns>The created <see cref="WithCSharpExpression"/>.</returns>
        public static WithCSharpExpression With(Expression @object, IEnumerable <MemberInfo> members, IEnumerable <MemberInitializer> initializers)
        {
            RequiresNotNull(@object, nameof(@object));
            RequiresNotNull(members, nameof(members));
            RequiresNotNull(initializers, nameof(initializers));

            var membersCollection      = members.ToReadOnly();
            var initializersCollection = initializers.ToReadOnly();

            ValidateWithReceiverAndInitializers(@object, initializersCollection, requiresCanAssign: false);

            var membersCount = membersCollection.Count;

            var newMembers  = new MemberInfo[membersCount];
            var memberTypes = new Type[membersCount];

            for (var i = 0; i < membersCount; i++)
            {
                var member = membersCollection[i];

                RequiresNotNull(member, nameof(member));

                if (!AreEquivalent(member.DeclaringType, @object.Type))
                {
                    throw LinqError.ArgumentMemberNotDeclOnType(member.Name, @object.Type.Name);
                }

                ValidateAnonymousTypeMember(ref member, out var memberType);

                newMembers[i]  = member;
                memberTypes[i] = memberType;
            }

            membersCollection = newMembers.ToReadOnly();

            var ctor = @object.Type.GetConstructor(BindingFlags.Public | BindingFlags.Instance, binder: null, memberTypes, modifiers: null);

            if (ctor == null)
            {
                throw Error.NoAnonymousTypeConstructorFound(@object.Type);
            }

            return(new WithCSharpExpression(@object, initializersCollection, clone: null, membersCollection));
        }
Пример #2
0
        private static void ValidateNewArgs(ConstructorInfo constructor, ref ReadOnlyCollection <Expression> arguments, ref ReadOnlyCollection <MemberInfo> members)
        {
            ParameterInfo[] pis;
            if ((pis = constructor.GetParametersCached()).Length > 0)
            {
                if (arguments.Count != pis.Length)
                {
                    throw Error.IncorrectNumberOfConstructorArguments();
                }
                if (arguments.Count != members.Count)
                {
                    throw Error.IncorrectNumberOfArgumentsForMembers();
                }
                Expression[] newArguments = null;
                MemberInfo[] newMembers   = null;
                for (int i = 0, n = arguments.Count; i < n; i++)
                {
                    Expression arg = arguments[i];
                    RequiresCanRead(arg, nameof(arguments), i);
                    MemberInfo member = members[i];
                    ContractUtils.RequiresNotNull(member, nameof(members), i);
                    if (!TypeUtils.AreEquivalent(member.DeclaringType, constructor.DeclaringType))
                    {
                        throw Error.ArgumentMemberNotDeclOnType(member.Name, constructor.DeclaringType.Name, nameof(members), i);
                    }
                    Type memberType;
                    ValidateAnonymousTypeMember(ref member, out memberType, nameof(members), i);
                    if (!TypeUtils.AreReferenceAssignable(memberType, arg.Type))
                    {
                        if (!TryQuote(memberType, ref arg))
                        {
                            throw Error.ArgumentTypeDoesNotMatchMember(arg.Type, memberType, nameof(arguments), i);
                        }
                    }
                    ParameterInfo pi    = pis[i];
                    Type          pType = pi.ParameterType;
                    if (pType.IsByRef)
                    {
                        pType = pType.GetElementType();
                    }
                    if (!TypeUtils.AreReferenceAssignable(pType, arg.Type))
                    {
                        if (!TryQuote(pType, ref arg))
                        {
                            throw Error.ExpressionTypeDoesNotMatchConstructorParameter(arg.Type, pType, nameof(arguments), i);
                        }
                    }
                    if (newArguments == null && arg != arguments[i])
                    {
                        newArguments = new Expression[arguments.Count];
                        for (int j = 0; j < i; j++)
                        {
                            newArguments[j] = arguments[j];
                        }
                    }
                    if (newArguments != null)
                    {
                        newArguments[i] = arg;
                    }

                    if (newMembers == null && member != members[i])
                    {
                        newMembers = new MemberInfo[members.Count];
                        for (int j = 0; j < i; j++)
                        {
                            newMembers[j] = members[j];
                        }
                    }
                    if (newMembers != null)
                    {
                        newMembers[i] = member;
                    }
                }
                if (newArguments != null)
                {
                    arguments = new TrueReadOnlyCollection <Expression>(newArguments);
                }
                if (newMembers != null)
                {
                    members = new TrueReadOnlyCollection <MemberInfo>(newMembers);
                }
            }
            else if (arguments != null && arguments.Count > 0)
            {
                throw Error.IncorrectNumberOfConstructorArguments();
            }
            else if (members != null && members.Count > 0)
            {
                throw Error.IncorrectNumberOfMembersForGivenConstructor();
            }
        }