Files
Dec2017-Script-Dump/System.Core/System/Linq/Expressions/MemberAssignment.cs
T
2026-06-04 11:42:34 +02:00

67 lines
2.0 KiB
C#

using System;
using System.Reflection;
using System.Reflection.Emit;
namespace System.Linq.Expressions
{
/// <summary>Represents initializing a field or property of a newly created object.</summary>
// Token: 0x02000024 RID: 36
public sealed class MemberAssignment : MemberBinding
{
// Token: 0x06000216 RID: 534 RVA: 0x0000B888 File Offset: 0x00009A88
internal MemberAssignment(MemberInfo member, Expression expression)
: base(MemberBindingType.Assignment, member)
{
this.expression = expression;
}
/// <summary>Gets the expression to assign to the field or property.</summary>
/// <returns>The <see cref="T:System.Linq.Expressions.Expression" /> that represents the value to assign to the field or property.</returns>
// Token: 0x17000023 RID: 35
// (get) Token: 0x06000217 RID: 535 RVA: 0x0000B89C File Offset: 0x00009A9C
public Expression Expression
{
get
{
return this.expression;
}
}
// Token: 0x06000218 RID: 536 RVA: 0x0000B8A4 File Offset: 0x00009AA4
internal override void Emit(EmitContext ec, LocalBuilder local)
{
base.Member.OnFieldOrProperty(delegate(FieldInfo field)
{
this.EmitFieldAssignment(ec, field, local);
}, delegate(PropertyInfo prop)
{
this.EmitPropertyAssignment(ec, prop, local);
});
}
// Token: 0x06000219 RID: 537 RVA: 0x0000B8F0 File Offset: 0x00009AF0
private void EmitFieldAssignment(EmitContext ec, FieldInfo field, LocalBuilder local)
{
ec.EmitLoadSubject(local);
this.expression.Emit(ec);
ec.ig.Emit(OpCodes.Stfld, field);
}
// Token: 0x0600021A RID: 538 RVA: 0x0000B924 File Offset: 0x00009B24
private void EmitPropertyAssignment(EmitContext ec, PropertyInfo property, LocalBuilder local)
{
MethodInfo setMethod = property.GetSetMethod(true);
if (setMethod == null)
{
throw new InvalidOperationException();
}
ec.EmitLoadSubject(local);
this.expression.Emit(ec);
ec.EmitCall(setMethod);
}
// Token: 0x040000A9 RID: 169
private Expression expression;
}
}