Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ValidateNewArgs()

static void System.Linq.Expressions.Expression< TDelegate >.ValidateNewArgs ( ConstructorInfo constructor,
ref ReadOnlyCollection< Expression< TDelegate > > arguments,
ref ReadOnlyCollection< MemberInfo > members )
inlinestaticprivateinherited

Definition at line 4527 of file Expression.cs.

4528 {
4530 if ((parametersCached = constructor.GetParametersCached()).Length != 0)
4531 {
4532 if (arguments.Count != parametersCached.Length)
4533 {
4534 throw Error.IncorrectNumberOfConstructorArguments();
4535 }
4537 {
4538 throw Error.IncorrectNumberOfArgumentsForMembers();
4539 }
4540 Expression[] array = null;
4541 MemberInfo[] array2 = null;
4542 int i = 0;
4543 for (int count = arguments.Count; i < count; i++)
4544 {
4546 ExpressionUtils.RequiresCanRead(argument, "arguments", i);
4547 MemberInfo member = members[i];
4548 ContractUtils.RequiresNotNull(member, "members", i);
4549 if (!TypeUtils.AreEquivalent(member.DeclaringType, constructor.DeclaringType))
4550 {
4551 throw Error.ArgumentMemberNotDeclOnType(member.Name, constructor.DeclaringType.Name, "members", i);
4552 }
4553 ValidateAnonymousTypeMember(ref member, out var memberType, "members", i);
4555 {
4556 throw Error.ArgumentTypeDoesNotMatchMember(argument.Type, memberType, "arguments", i);
4557 }
4559 Type type = parameterInfo.ParameterType;
4560 if (type.IsByRef)
4561 {
4562 type = type.GetElementType();
4563 }
4565 {
4566 throw Error.ExpressionTypeDoesNotMatchConstructorParameter(argument.Type, type, "arguments", i);
4567 }
4568 if (array == null && argument != arguments[i])
4569 {
4571 for (int j = 0; j < i; j++)
4572 {
4573 array[j] = arguments[j];
4574 }
4575 }
4576 if (array != null)
4577 {
4578 array[i] = argument;
4579 }
4580 if (array2 == null && member != members[i])
4581 {
4583 for (int k = 0; k < i; k++)
4584 {
4585 array2[k] = members[k];
4586 }
4587 }
4588 if (array2 != null)
4589 {
4590 array2[i] = member;
4591 }
4592 }
4593 if (array != null)
4594 {
4596 }
4597 if (array2 != null)
4598 {
4600 }
4601 }
4602 else
4603 {
4604 if (arguments != null && arguments.Count > 0)
4605 {
4606 throw Error.IncorrectNumberOfConstructorArguments();
4607 }
4608 if (members != null && members.Count > 0)
4609 {
4610 throw Error.IncorrectNumberOfMembersForGivenConstructor();
4611 }
4612 }
4613 }
static void RequiresNotNull(object value, string paramName)
static void RequiresCanRead(Expression expression, string paramName)
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
static bool AreReferenceAssignable(Type dest, Type src)
Definition TypeUtils.cs:673
static void ValidateAnonymousTypeMember(ref MemberInfo member, out Type memberType, string paramName, int index)
static bool TryQuote(Type parameterType, ref Expression argument)

References System.Dynamic.Utils.TypeUtils.AreEquivalent(), System.Dynamic.Utils.TypeUtils.AreReferenceAssignable(), System.Linq.Expressions.Error.ArgumentMemberNotDeclOnType(), System.Linq.Expressions.Error.ArgumentTypeDoesNotMatchMember(), System.array, System.Linq.count, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Reflection.MemberInfo.DeclaringType, System.Linq.Expressions.Error.ExpressionTypeDoesNotMatchConstructorParameter(), System.Linq.Expressions.Error.IncorrectNumberOfArgumentsForMembers(), System.Linq.Expressions.Error.IncorrectNumberOfConstructorArguments(), System.Linq.Expressions.Error.IncorrectNumberOfMembersForGivenConstructor(), System.Reflection.MemberInfo.Name, System.Dynamic.Utils.ExpressionUtils.RequiresCanRead(), System.Dynamic.Utils.ContractUtils.RequiresNotNull(), System.Linq.Expressions.Expression< TDelegate >.TryQuote(), System.type, and System.Linq.Expressions.Expression< TDelegate >.ValidateAnonymousTypeMember().

Referenced by System.Linq.Expressions.Expression< TDelegate >.New().