Expression.ListInit 方法

定义

创建一个 ListInitExpression

重载

ListInit(NewExpression, IEnumerable<ElementInit>)

创建一个使用指定 ListInitExpression 对象来初始化集合的 ElementInit

ListInit(NewExpression, IEnumerable<Expression>)

创建一个使用名为“Add”的方法将元素添加到集合中的 ListInitExpression

ListInit(NewExpression, ElementInit[])

创建一个使用指定 ListInitExpression 对象来初始化集合的 ElementInit

ListInit(NewExpression, Expression[])

创建一个使用名为“Add”的方法将元素添加到集合中的 ListInitExpression

ListInit(NewExpression, MethodInfo, IEnumerable<Expression>)

创建一个使用指定方法将元素添加到集合中的 ListInitExpression

ListInit(NewExpression, MethodInfo, Expression[])

创建一个使用指定方法将元素添加到集合中的 ListInitExpression

ListInit(NewExpression, IEnumerable<ElementInit>)

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用指定 ListInitExpression 对象来初始化集合的 ElementInit

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, System::Collections::Generic::IEnumerable<System::Linq::Expressions::ElementInit ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Collections.Generic.IEnumerable<System.Linq.Expressions.ElementInit> initializers);
static member ListInit : System.Linq.Expressions.NewExpression * seq<System.Linq.Expressions.ElementInit> -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, initializers As IEnumerable(Of ElementInit)) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

initializers
IEnumerable<ElementInit>

一个 IEnumerable<T>,包含用来填充 ElementInit 集合的 Initializers 对象。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpressionInitializers 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

示例

以下示例演示如何使用 ListInit(NewExpression, ElementInit[]) 方法创建一个 ListInitExpression 表示具有两个键值对的新字典实例初始化的 。

string tree1 = "maple";
string tree2 = "oak";

System.Reflection.MethodInfo addMethod = typeof(Dictionary<int, string>).GetMethod("Add");

// Create two ElementInit objects that represent the
// two key-value pairs to add to the Dictionary.
System.Linq.Expressions.ElementInit elementInit1 =
    System.Linq.Expressions.Expression.ElementInit(
        addMethod,
        System.Linq.Expressions.Expression.Constant(tree1.Length),
        System.Linq.Expressions.Expression.Constant(tree1));
System.Linq.Expressions.ElementInit elementInit2 =
    System.Linq.Expressions.Expression.ElementInit(
        addMethod,
        System.Linq.Expressions.Expression.Constant(tree2.Length),
        System.Linq.Expressions.Expression.Constant(tree2));

// Create a NewExpression that represents constructing
// a new instance of Dictionary<int, string>.
System.Linq.Expressions.NewExpression newDictionaryExpression =
    System.Linq.Expressions.Expression.New(typeof(Dictionary<int, string>));

// Create a ListInitExpression that represents initializing
// a new Dictionary<> instance with two key-value pairs.
System.Linq.Expressions.ListInitExpression listInitExpression =
    System.Linq.Expressions.Expression.ListInit(
        newDictionaryExpression,
        elementInit1,
        elementInit2);

Console.WriteLine(listInitExpression.ToString());

// This code produces the following output:
//
// new Dictionary`2() {Void Add(Int32, System.String)(5,"maple"),
// Void Add(Int32, System.String)(3,"oak")}
Dim tree1 As String = "maple"
Dim tree2 As String = "oak"

Dim addMethod As System.Reflection.MethodInfo = _
    Type.GetType("System.Collections.Generic.Dictionary`2[System.Int32, System.String]").GetMethod("Add")

' Create two ElementInit objects that represent the
' two key-value pairs to add to the Dictionary.
Dim elementInit1 As System.Linq.Expressions.ElementInit = _
    System.Linq.Expressions.Expression.ElementInit( _
        addMethod, _
        System.Linq.Expressions.Expression.Constant(tree1.Length), _
        System.Linq.Expressions.Expression.Constant(tree1))
Dim elementInit2 As System.Linq.Expressions.ElementInit = _
    System.Linq.Expressions.Expression.ElementInit( _
        addMethod, _
        System.Linq.Expressions.Expression.Constant(tree2.Length), _
        System.Linq.Expressions.Expression.Constant(tree2))

' Create a NewExpression that represents constructing
' a new instance of Dictionary(Of Integer, String).
Dim newDictionaryExpression As System.Linq.Expressions.NewExpression = _
    System.Linq.Expressions.Expression.[New](Type.GetType("System.Collections.Generic.Dictionary`2[System.Int32, System.String]"))

' Create a ListInitExpression that represents initializing
' a new Dictionary(Of T) instance with two key-value pairs.
Dim listInitExpression As System.Linq.Expressions.ListInitExpression = _
    System.Linq.Expressions.Expression.ListInit( _
        newDictionaryExpression, _
        elementInit1, _
        elementInit2)

Console.WriteLine(listInitExpression.ToString())

' This code produces the following output:
'
' new Dictionary`2() {Void Add(Int32, System.String)(5,"maple"),
' Void Add(Int32, System.String)(3,"oak")

注解

TypenewExpression 属性必须表示实现 的类型 IEnumerable

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于

ListInit(NewExpression, IEnumerable<Expression>)

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用名为“Add”的方法将元素添加到集合中的 ListInitExpression

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> initializers);
static member ListInit : System.Linq.Expressions.NewExpression * seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, initializers As IEnumerable(Of Expression)) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

initializers
IEnumerable<Expression>

一个 IEnumerable<T>,包含用来填充 Expression 集合的 Initializers 对象。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpression 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

没有在 newExpression.Type 或其基类型中声明的名为“Add”(不区分大小写)的实例方法。

- 或 -

newExpression.Type 或其基类型上的 add 方法不采用确切的参数。

- 或 -

initializers 的第一个元素的 Type 属性表示的类型不可分配给 newExpression.Type 或其基类型上 add 方法的参数类型。

- 或 -

newExpression.Type 和/或其基类型上存在多个名为“Add”(不区分大小写)且与参数兼容的方法。

注解

TypenewExpression 属性必须表示实现 的类型 IEnumerable

为了使用 的 ListInit(NewExpression, IEnumerable<Expression>)此重载。 newExpression类型或其基类型必须声明一个名为“Add”的单个方法, (不区分大小写的) 只使用一个参数。 参数的类型必须可从 由 的第一个元素的 属性表示 Type 的类型 initializers中分配。

Initializers返回ListInitExpression的 的 属性包含每个 元素的 initializers类型的ElementInit一个元素。 Arguments的每个元素Initializers的 属性都是一个单一实例集合,其中包含 的相应元素initializersAddMethod的每个 元素Initializers的 属性表示在 上newExpression发现的 add 方法。类型或其基类型。

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于

ListInit(NewExpression, ElementInit[])

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用指定 ListInitExpression 对象来初始化集合的 ElementInit

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, ... cli::array <System::Linq::Expressions::ElementInit ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, params System.Linq.Expressions.ElementInit[] initializers);
static member ListInit : System.Linq.Expressions.NewExpression * System.Linq.Expressions.ElementInit[] -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, ParamArray initializers As ElementInit()) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

initializers
ElementInit[]

用于填充 ElementInit 集合的 Initializers 对象的数组。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpressionInitializers 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

示例

以下示例演示如何使用 ListInit(NewExpression, ElementInit[]) 方法创建一个 ListInitExpression 表示具有两个键值对的新字典实例初始化的 。

string tree1 = "maple";
string tree2 = "oak";

System.Reflection.MethodInfo addMethod = typeof(Dictionary<int, string>).GetMethod("Add");

// Create two ElementInit objects that represent the
// two key-value pairs to add to the Dictionary.
System.Linq.Expressions.ElementInit elementInit1 =
    System.Linq.Expressions.Expression.ElementInit(
        addMethod,
        System.Linq.Expressions.Expression.Constant(tree1.Length),
        System.Linq.Expressions.Expression.Constant(tree1));
System.Linq.Expressions.ElementInit elementInit2 =
    System.Linq.Expressions.Expression.ElementInit(
        addMethod,
        System.Linq.Expressions.Expression.Constant(tree2.Length),
        System.Linq.Expressions.Expression.Constant(tree2));

// Create a NewExpression that represents constructing
// a new instance of Dictionary<int, string>.
System.Linq.Expressions.NewExpression newDictionaryExpression =
    System.Linq.Expressions.Expression.New(typeof(Dictionary<int, string>));

// Create a ListInitExpression that represents initializing
// a new Dictionary<> instance with two key-value pairs.
System.Linq.Expressions.ListInitExpression listInitExpression =
    System.Linq.Expressions.Expression.ListInit(
        newDictionaryExpression,
        elementInit1,
        elementInit2);

Console.WriteLine(listInitExpression.ToString());

// This code produces the following output:
//
// new Dictionary`2() {Void Add(Int32, System.String)(5,"maple"),
// Void Add(Int32, System.String)(3,"oak")}
Dim tree1 As String = "maple"
Dim tree2 As String = "oak"

Dim addMethod As System.Reflection.MethodInfo = _
    Type.GetType("System.Collections.Generic.Dictionary`2[System.Int32, System.String]").GetMethod("Add")

' Create two ElementInit objects that represent the
' two key-value pairs to add to the Dictionary.
Dim elementInit1 As System.Linq.Expressions.ElementInit = _
    System.Linq.Expressions.Expression.ElementInit( _
        addMethod, _
        System.Linq.Expressions.Expression.Constant(tree1.Length), _
        System.Linq.Expressions.Expression.Constant(tree1))
Dim elementInit2 As System.Linq.Expressions.ElementInit = _
    System.Linq.Expressions.Expression.ElementInit( _
        addMethod, _
        System.Linq.Expressions.Expression.Constant(tree2.Length), _
        System.Linq.Expressions.Expression.Constant(tree2))

' Create a NewExpression that represents constructing
' a new instance of Dictionary(Of Integer, String).
Dim newDictionaryExpression As System.Linq.Expressions.NewExpression = _
    System.Linq.Expressions.Expression.[New](Type.GetType("System.Collections.Generic.Dictionary`2[System.Int32, System.String]"))

' Create a ListInitExpression that represents initializing
' a new Dictionary(Of T) instance with two key-value pairs.
Dim listInitExpression As System.Linq.Expressions.ListInitExpression = _
    System.Linq.Expressions.Expression.ListInit( _
        newDictionaryExpression, _
        elementInit1, _
        elementInit2)

Console.WriteLine(listInitExpression.ToString())

' This code produces the following output:
'
' new Dictionary`2() {Void Add(Int32, System.String)(5,"maple"),
' Void Add(Int32, System.String)(3,"oak")

注解

TypenewExpression 属性必须表示实现 的类型 IEnumerable

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于

ListInit(NewExpression, Expression[])

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用名为“Add”的方法将元素添加到集合中的 ListInitExpression

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, ... cli::array <System::Linq::Expressions::Expression ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, params System.Linq.Expressions.Expression[] initializers);
static member ListInit : System.Linq.Expressions.NewExpression * System.Linq.Expressions.Expression[] -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, ParamArray initializers As Expression()) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

initializers
Expression[]

用于填充 Expression 集合的 Initializers 对象的数组。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpression 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

没有在 newExpression.Type 或其基类型中声明的名为“Add”(不区分大小写)的实例方法。

- 或 -

newExpression.Type 或其基类型上的 add 方法不采用确切的参数。

- 或 -

initializers 的第一个元素的 Type 属性表示的类型不可分配给 newExpression.Type 或其基类型上 add 方法的参数类型。

- 或 -

newExpression.Type 和/或其基类型上存在多个名为“Add”(不区分大小写)且与参数兼容的方法。

注解

TypenewExpression 属性必须表示实现 的类型 IEnumerable

为了使用 的 ListInit(NewExpression, Expression[])此重载。 newExpression类型或其基类型必须声明一个名为“Add”的单个方法, (不区分大小写的) 只使用一个参数。 参数的类型必须可从 由 的第一个元素的 属性表示 Type 的类型 initializers中分配。

Initializers返回ListInitExpression的 的 属性包含每个 元素的 initializers类型的ElementInit一个元素。 Arguments的每个元素Initializers的 属性都是一个单一实例集合,其中包含 的相应元素initializersAddMethod的每个 元素Initializers的 属性表示在 上newExpression发现的 add 方法。类型或其基类型。

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于

ListInit(NewExpression, MethodInfo, IEnumerable<Expression>)

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用指定方法将元素添加到集合中的 ListInitExpression

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, System::Reflection::MethodInfo ^ addMethod, System::Collections::Generic::IEnumerable<System::Linq::Expressions::Expression ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Reflection.MethodInfo addMethod, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Reflection.MethodInfo? addMethod, System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression> initializers);
static member ListInit : System.Linq.Expressions.NewExpression * System.Reflection.MethodInfo * seq<System.Linq.Expressions.Expression> -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, addMethod As MethodInfo, initializers As IEnumerable(Of Expression)) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

addMethod
MethodInfo

一个 MethodInfo,表示名为“Add”(不区分大小写),用于将元素添加到集合的实例方法。

initializers
IEnumerable<Expression>

一个 IEnumerable<T>,包含用来填充 Expression 集合的 Initializers 对象。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpression 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

- 或 -

addMethod 不为 null,并且它不表示名为"Add"(不区分大小写)的正好带一个参数的实例方法。

- 或 -

addMethod 不为 null,并且 Type 的一个或多个元素的 initializers 属性所表示的类型不能赋给 addMethod 所表示的方法的参数类型。

addMethodnull,并且 newExpression.Type 或其基类型上不存在名为"Add"的带一个兼容类型的参数的任何实例方法。

注解

TypenewExpression 属性必须表示实现 的类型 IEnumerable

如果 为 null,则newExpressionaddMethod 。类型或其基类型必须声明一个名为“Add”的单个方法, (不区分大小写的) 只使用一个参数。 如果 addMethod 不是 null,则它必须表示名为“Add”的实例方法, (不区分大小写) ,该实例只包含一个参数。 由 Type 的每个元素 initializers 的 属性表示的类型必须可分配给 add 方法的参数类型。

Initializers返回ListInitExpression的 的 属性包含每个 元素的 initializers类型的ElementInit一个元素。 Arguments的每个元素Initializers的 属性都是一个单一实例集合,其中包含 的相应元素initializers。 的每个 AddMethod 元素 Initializers 的 属性等于 addMethod

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于

ListInit(NewExpression, MethodInfo, Expression[])

Source:
ListInitExpression.cs
Source:
ListInitExpression.cs
Source:
ListInitExpression.cs

创建一个使用指定方法将元素添加到集合中的 ListInitExpression

public:
 static System::Linq::Expressions::ListInitExpression ^ ListInit(System::Linq::Expressions::NewExpression ^ newExpression, System::Reflection::MethodInfo ^ addMethod, ... cli::array <System::Linq::Expressions::Expression ^> ^ initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Reflection.MethodInfo addMethod, params System.Linq.Expressions.Expression[] initializers);
public static System.Linq.Expressions.ListInitExpression ListInit (System.Linq.Expressions.NewExpression newExpression, System.Reflection.MethodInfo? addMethod, params System.Linq.Expressions.Expression[] initializers);
static member ListInit : System.Linq.Expressions.NewExpression * System.Reflection.MethodInfo * System.Linq.Expressions.Expression[] -> System.Linq.Expressions.ListInitExpression
Public Shared Function ListInit (newExpression As NewExpression, addMethod As MethodInfo, ParamArray initializers As Expression()) As ListInitExpression

参数

newExpression
NewExpression

要将 NewExpression 属性设置为与其相等的 NewExpression

addMethod
MethodInfo

一个 MethodInfo,表示带一个参数,用于将元素添加到集合中的实例方法。

initializers
Expression[]

用于填充 Expression 集合的 Initializers 对象的数组。

返回

一个 ListInitExpression,其 NodeType 属性等于 ListInit,并且其 NewExpression 属性设置为指定值。

例外

newExpressioninitializersnull

- 或 -

initializers 的一个或多个元素为 null

newExpression.Type 不实现 IEnumerable

- 或 -

addMethod 不为 null,并且它不表示名为"Add"(不区分大小写)的正好带一个参数的实例方法。

- 或 -

addMethod 不为 null,并且 Type 的一个或多个元素的 initializers 属性所表示的类型不能赋给 addMethod 所表示的方法的参数类型。

addMethodnull,并且 newExpression.Type 或其基类型上不存在名为"Add"的带一个兼容类型的参数的任何实例方法。

注解

TypenewExpression 属性必须表示实现 的类型IEnumerable

如果 addMethodnull,则 newExpression为 。类型或其基类型必须声明一个名为“Add”的单个方法, (不区分大小写的) ,该方法只采用一个参数。 如果 addMethod 不是 null,则它必须表示一个名为“Add”的实例方法, (不区分大小写) ,该实例方法正好具有一个参数。 由 Type 的每个元素 initializers 的 属性表示的类型必须可分配给 add 方法的参数类型。

Initializers对于 的每个元素,返回ListInitExpression的 属性包含一个 类型ElementInit为 的initializers元素。 Arguments的每个元素Initializers的 属性都是一个单一实例集合,其中包含 的initializers相应元素。 AddMethod的每个元素Initializers的 属性等于 addMethod

Type生成的 ListInitExpression 的 属性等于 newExpression。类型。

适用于