Expression.ListInit 方法

定義

建立 ListInitExpression

多載

ListInit(NewExpression, IEnumerable<ElementInit>)

建立 ListInitExpression,它使用指定的 ElementInit 物件初始化集合。

ListInit(NewExpression, IEnumerable<Expression>)

建立 ListInitExpression,其使用名為 "Add" 的方法將項目加入集合。

ListInit(NewExpression, ElementInit[])

建立 ListInitExpression,它使用指定的 ElementInit 物件初始化集合。

ListInit(NewExpression, Expression[])

建立 ListInitExpression,其使用名為 "Add" 的方法將項目加入集合。

ListInit(NewExpression, MethodInfo, IEnumerable<Expression>)

建立 ListInitExpression,其使用指定的方法將項目加入集合。

ListInit(NewExpression, MethodInfo, Expression[])

建立 ListInitExpression,其使用指定的方法將項目加入集合。

ListInit(NewExpression, IEnumerable<ElementInit>)

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
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")

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於

ListInit(NewExpression, IEnumerable<Expression>)

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
ListInitExpression.cs

建立 ListInitExpression,其使用名為 "Add" 的方法將項目加入集合。

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 方法的引數類型。

-或-

多個名為 "Add" (不區分大小寫) 的引數相容方法存在於 newExpression .Type 和/或其基底型別。

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

若要使用 的這個多載 ListInit(NewExpression, IEnumerable<Expression>)newExpression 。Type 或其基底型別必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只需要一個引數。 引數的類型必須可從 之第一個專案 initializers 的 屬性所 Type 表示的類型指派。

InitializersListInitExpression 的 屬性包含 每個 專案的一個類型 ElementInit 專案 initializersArguments每個 專案的 Initializers 屬性都是單一集合,其中包含 的 initializers 對應專案。 AddMethod每個 元素 Initializers 的 屬性都代表 在 上 newExpression 探索到的 add 方法。類型或其基底類型。

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於

ListInit(NewExpression, ElementInit[])

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
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")

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於

ListInit(NewExpression, Expression[])

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
ListInitExpression.cs

建立 ListInitExpression,其使用名為 "Add" 的方法將項目加入集合。

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 方法的引數類型。

-或-

多個名為 "Add" (不區分大小寫) 的引數相容方法存在於 newExpression .Type 和/或其基底型別。

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

若要使用 的這個多載 ListInit(NewExpression, Expression[])newExpression 。Type 或其基底型別必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只需要一個引數。 引數的類型必須可從 之第一個專案 initializers 的 屬性所 Type 表示的類型指派。

InitializersListInitExpression 的 屬性包含 每個 專案的一個類型 ElementInit 專案 initializersArguments每個 專案的 Initializers 屬性都是單一集合,其中包含 的 initializers 對應專案。 AddMethod每個 元素 Initializers 的 屬性都代表 在 上 newExpression 探索到的 add 方法。類型或其基底類型。

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於

ListInit(NewExpression, MethodInfo, IEnumerable<Expression>)

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
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,且 initializers 之一個或多個項目的 Type 屬性表示的類型無法指派給 addMethod 所表示之方法的引數類型。

addMethodnull,且 newExpression.Type 或其基底類型上沒有採用一個類型相容引數之名為 "Add" 的執行個體方法。

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

如果 addMethod 為 , newExpression 則為 null 。Type 或其基底型別必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只需要一個引數。 如果 addMethod 不是 null ,它必須代表名稱為 「Add」 的實例方法, (不區分大小寫的) ,且該實例方法只有一個參數。 每個 元素的 屬性所 Type 代表的類型 initializers 必須指派給 add 方法的引數型別。

InitializersListInitExpression 的 屬性包含 每個 專案的一個類型 ElementInit 專案 initializersArguments每個 專案的 Initializers 屬性都是單一集合,其中包含 的 initializers 對應專案。 AddMethod的每個元素 Initializers 屬性都等於 addMethod

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於

ListInit(NewExpression, MethodInfo, Expression[])

來源:
ListInitExpression.cs
來源:
ListInitExpression.cs
來源:
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,且 initializers 之一個或多個項目的 Type 屬性表示的類型無法指派給 addMethod 所表示之方法的引數類型。

addMethodnull,且 newExpression.Type 或其基底類型上沒有採用一個類型相容引數之名為 "Add" 的執行個體方法。

備註

Type 屬性 newExpression 必須代表實作 的類型 IEnumerable

如果 addMethod 為 , newExpression 則為 null 。Type 或其基底型別必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只需要一個引數。 如果 addMethod 不是 null ,它必須代表名稱為 「Add」 的實例方法, (不區分大小寫的) ,且該實例方法只有一個參數。 每個 元素的 屬性所 Type 代表的類型 initializers 必須指派給 add 方法的引數型別。

InitializersListInitExpression 的 屬性包含 每個 專案的一個類型 ElementInit 專案 initializersArguments每個 專案的 Initializers 屬性都是單一集合,其中包含 的 initializers 對應專案。 AddMethod的每個元素 Initializers 屬性都等於 addMethod

產生的 TypeListInitExpression 屬性等於 newExpression 。類型。

適用於