Expression.MemberInit 方法

定义

表示一个表达式,该表达式创建新对象并初始化该对象的一个属性。Represents an expression that creates a new object and initializes a property of the object.

重载

MemberInit(NewExpression, IEnumerable<MemberBinding>)

表示一个表达式,该表达式创建新对象并初始化该对象的一个属性。Represents an expression that creates a new object and initializes a property of the object.

MemberInit(NewExpression, MemberBinding[])

创建一个 MemberInitExpressionCreates a MemberInitExpression.

MemberInit(NewExpression, IEnumerable<MemberBinding>)

表示一个表达式,该表达式创建新对象并初始化该对象的一个属性。Represents an expression that creates a new object and initializes a property of the object.

public:
 static System::Linq::Expressions::MemberInitExpression ^ MemberInit(System::Linq::Expressions::NewExpression ^ newExpression, System::Collections::Generic::IEnumerable<System::Linq::Expressions::MemberBinding ^> ^ bindings);
public static System.Linq.Expressions.MemberInitExpression MemberInit (System.Linq.Expressions.NewExpression newExpression, System.Collections.Generic.IEnumerable<System.Linq.Expressions.MemberBinding> bindings);
static member MemberInit : System.Linq.Expressions.NewExpression * seq<System.Linq.Expressions.MemberBinding> -> System.Linq.Expressions.MemberInitExpression
Public Shared Function MemberInit (newExpression As NewExpression, bindings As IEnumerable(Of MemberBinding)) As MemberInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpressionA NewExpression to set the NewExpression property equal to.

bindings
IEnumerable<MemberBinding>

一个 IEnumerable<T>,包含用来填充 MemberBinding 集合的 Bindings 对象。An IEnumerable<T> that contains MemberBinding objects to use to populate the Bindings collection.

返回

MemberInitExpression

一个 MemberInitExpression,其 NodeType 属性等于 MemberInit,并且其 NewExpressionBindings 属性设置为指定值。A MemberInitExpression that has the NodeType property equal to MemberInit and the NewExpression and Bindings properties set to the specified values.

例外

newExpressionbindingsnullnewExpression or bindings is null.

bindings 的元素的 Member 属性不表示 newExpression.Type 所表示的类型的成员。The Member property of an element of bindings does not represent a member of the type that newExpression.Type represents.

示例

下面的示例演示了一个表达式,该表达式创建一个新的对象并初始化该对象的一个属性。The following example demonstrates an expression that creates a new object and initializes a property of the object.


// Add the following directive to your file:
// using System.Linq.Expressions;

class TestMemberInitClass
{
    public int sample { get; set; }
}

static void MemberInit()
{
    // This expression creates a new TestMemberInitClass object
    // and assigns 10 to its sample property.
    Expression testExpr = Expression.MemberInit(
        Expression.New(typeof(TestMemberInitClass)),
        new List<MemberBinding>() {
            Expression.Bind(typeof(TestMemberInitClass).GetMember("sample")[0], Expression.Constant(10))
        }
    );

    // The following statement first creates an expression tree,
    // then compiles it, and then runs it.
    var test = Expression.Lambda<Func<TestMemberInitClass>>(testExpr).Compile()();
    Console.WriteLine(test.sample);
}

// This code example produces the following output:
//
// 10
' Add the following directive to your file:
' Imports System.Linq.Expressions  

Class TestMemberInitClass
    Public Property Sample As Integer
End Class

Sub MemberInit()
    ' This expression creates a new TestMemberInitClass object
    ' and assigns 10 to its Sample property.
    Dim testExpr As Expression = Expression.MemberInit(
        Expression.[New](GetType(TestMemberInitClass)),
        New List(Of MemberBinding)() From {
            Expression.Bind(GetType(TestMemberInitClass).GetMember("Sample")(0), Expression.Constant(10))
        }
    )

    ' The following statement first creates an expression tree,
    ' then compiles it, and then runs it.
    Dim test = Expression.Lambda(Of Func(Of TestMemberInitClass))(testExpr).Compile()()
    Console.WriteLine(test.Sample)
End Sub

' This code example produces the following output:
'
' 10

注解

Type生成的的属性 MemberInitExpression 等于的 Type 属性 newExpressionThe Type property of the resulting MemberInitExpression is equal to the Type property of newExpression.

适用于

MemberInit(NewExpression, MemberBinding[])

创建一个 MemberInitExpressionCreates a MemberInitExpression.

public:
 static System::Linq::Expressions::MemberInitExpression ^ MemberInit(System::Linq::Expressions::NewExpression ^ newExpression, ... cli::array <System::Linq::Expressions::MemberBinding ^> ^ bindings);
public static System.Linq.Expressions.MemberInitExpression MemberInit (System.Linq.Expressions.NewExpression newExpression, params System.Linq.Expressions.MemberBinding[] bindings);
static member MemberInit : System.Linq.Expressions.NewExpression * System.Linq.Expressions.MemberBinding[] -> System.Linq.Expressions.MemberInitExpression
Public Shared Function MemberInit (newExpression As NewExpression, ParamArray bindings As MemberBinding()) As MemberInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpressionA NewExpression to set the NewExpression property equal to.

bindings
MemberBinding[]

用于填充 MemberBinding 集合的 Bindings 对象的数组。An array of MemberBinding objects to use to populate the Bindings collection.

返回

MemberInitExpression

一个 MemberInitExpression,其 NodeType 属性等于 MemberInit,并且其 NewExpressionBindings 属性设置为指定值。A MemberInitExpression that has the NodeType property equal to MemberInit and the NewExpression and Bindings properties set to the specified values.

例外

newExpressionbindingsnullnewExpression or bindings is null.

bindings 的元素的 Member 属性不表示 newExpression.Type 所表示的类型的成员。The Member property of an element of bindings does not represent a member of the type that newExpression.Type represents.

示例

下面的示例演示如何使用 MemberInit(NewExpression, MemberBinding[]) 方法创建一个 MemberInitExpression ,该对象表示新对象的两个成员的初始化。The following example demonstrates how to use the MemberInit(NewExpression, MemberBinding[]) method to create a MemberInitExpression that represents the initialization of two members of a new object.

class Animal
{
    public string Species {get; set;}
    public int Age {get; set;}
}

public static void CreateMemberInitExpression()
{
    System.Linq.Expressions.NewExpression newAnimal =
        System.Linq.Expressions.Expression.New(typeof(Animal));

    System.Reflection.MemberInfo speciesMember =
        typeof(Animal).GetMember("Species")[0];
    System.Reflection.MemberInfo ageMember =
        typeof(Animal).GetMember("Age")[0];

    // Create a MemberBinding object for each member
    // that you want to initialize.
    System.Linq.Expressions.MemberBinding speciesMemberBinding =
        System.Linq.Expressions.Expression.Bind(
            speciesMember,
            System.Linq.Expressions.Expression.Constant("horse"));
    System.Linq.Expressions.MemberBinding ageMemberBinding =
        System.Linq.Expressions.Expression.Bind(
            ageMember,
            System.Linq.Expressions.Expression.Constant(12));

    // Create a MemberInitExpression that represents initializing
    // two members of the 'Animal' class.
    System.Linq.Expressions.MemberInitExpression memberInitExpression =
        System.Linq.Expressions.Expression.MemberInit(
            newAnimal,
            speciesMemberBinding,
            ageMemberBinding);

    Console.WriteLine(memberInitExpression.ToString());

    // This code produces the following output:
    //
    // new Animal() {Species = "horse", Age = 12}
}
Class Animal
    Public Species As String
    Public Age As Integer
End Class

Shared Sub CreateMemberInitExpression()
    Dim newAnimal As System.Linq.Expressions.NewExpression = _
        System.Linq.Expressions.Expression.[New](Type.GetType("ExpressionVB.MemberInitExample+Animal"))

    Dim speciesMember As System.Reflection.MemberInfo = _
        Type.GetType("ExpressionVB.MemberInitExample+Animal").GetMember("Species")(0)
    Dim ageMember As System.Reflection.MemberInfo = _
        Type.GetType("ExpressionVB.MemberInitExample+Animal").GetMember("Age")(0)

    ' Create a MemberBinding object for each member
    ' that you want to initialize.
    Dim speciesMemberBinding As System.Linq.Expressions.MemberBinding = _
        System.Linq.Expressions.Expression.Bind( _
            speciesMember, _
            System.Linq.Expressions.Expression.Constant("horse"))
    Dim ageMemberBinding As System.Linq.Expressions.MemberBinding = _
        System.Linq.Expressions.Expression.Bind( _
            ageMember, _
            System.Linq.Expressions.Expression.Constant(12))

    ' Create a MemberInitExpression that represents initializing
    ' two members of the 'Animal' class.
    Dim memberInitExpression As System.Linq.Expressions.MemberInitExpression = _
        System.Linq.Expressions.Expression.MemberInit( _
            newAnimal, _
            speciesMemberBinding, _
            ageMemberBinding)

    Console.WriteLine(memberInitExpression.ToString())

    ' This code produces the following output:
    '
    ' new Animal() {Species = "horse", Age = 12}
End Sub

注解

Type生成的的属性 MemberInitExpression 等于的 Type 属性 newExpressionThe Type property of the resulting MemberInitExpression is equal to the Type property of newExpression.

适用于