67 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|