Expression.ListInit 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
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,它使用指定的 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,且 NewExpression 和 Initializers 屬性設定為指定的值。
例外狀況
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>)
建立 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 屬性設定為指定的值。
例外狀況
newExpression
.Type 未實作 IEnumerable。
未在 newExpression
.Type 或其基底型別中宣告名為 "Add" (不區分大小寫) 的執行個體。
-或-
newExpression
.Type 或其基底型別中的 add 方法不是只接受一個引數。
-或-
initializers
的第一個項目的 Type 屬性所代表的型別,無法指派給 newExpression
.Type 或其基底型別上的 add 方法的引數類型。
-或-
多個名為 "Add" (不區分大小寫) 的引數相容方法存在於 newExpression
.Type 和/或其基底型別。
備註
的 TypenewExpression
屬性必須代表實作 IEnumerable的類型。
若要使用 的 ListInit(NewExpression, IEnumerable<Expression>)這個多載, newExpression
。類型或其基底類型必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只接受一個自變數。 自變數的類型必須可從的第一initializers
個專案之 屬性所Type代表的類型指派。
所Initializers傳ListInitExpression回 的 屬性包含 每個專案的initializers
型別ElementInit專案。 Arguments每個 項目的 Initializers 屬性都是單一集合,其中包含的initializers
對應專案。 AddMethod之每個 項目的 Initializers 屬性都代表 在 上newExpression
探索到的 add 方法。類型或其基底類型。
Type產生的 ListInitExpression 屬性等於 newExpression
。類型。
適用於
ListInit(NewExpression, ElementInit[])
建立 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,且 NewExpression 和 Initializers 屬性設定為指定的值。
例外狀況
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[])
建立 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 屬性設定為指定的值。
例外狀況
newExpression
.Type 未實作 IEnumerable。
未在 newExpression
.Type 或其基底型別中宣告名為 "Add" (不區分大小寫) 的執行個體。
-或-
newExpression
.Type 或其基底型別中的 add 方法不是只接受一個引數。
-或-
initializers
的第一個項目的 Type 屬性所代表的型別,無法指派給 newExpression
.Type 或其基底型別上的 add 方法的引數類型。
-或-
多個名為 "Add" (不區分大小寫) 的引數相容方法存在於 newExpression
.Type 和/或其基底型別。
備註
的 TypenewExpression
屬性必須代表實作 IEnumerable的類型。
若要使用 的 ListInit(NewExpression, Expression[])這個多載, newExpression
。類型或其基底類型必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只接受一個自變數。 自變數的類型必須可從的第一initializers
個專案之 屬性所Type代表的類型指派。
所Initializers傳ListInitExpression回 的 屬性包含 每個專案的initializers
型別ElementInit專案。 Arguments每個 項目的 Initializers 屬性都是單一集合,其中包含的initializers
對應專案。 AddMethod之每個 項目的 Initializers 屬性都代表 在 上newExpression
探索到的 add 方法。類型或其基底類型。
Type產生的 ListInitExpression 屬性等於 newExpression
。類型。
適用於
ListInit(NewExpression, MethodInfo, IEnumerable<Expression>)
建立 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 屬性設定為指定的值。
例外狀況
newExpression
.Type 未實作 IEnumerable。
-或-
addMethod
不是 null
,它不表示名為 "Add" (區分大小寫) 的執行個體方法,這個方法剛好只採用一個引數。
-或-
addMethod
不是 null
,且 initializers
之一個或多個項目的 Type 屬性表示的類型無法指派給 addMethod
所表示之方法的引數類型。
addMethod
是 null
,且 newExpression
.Type 或其基底類型上沒有採用一個類型相容引數之名為 "Add" 的執行個體方法。
備註
的 TypenewExpression
屬性必須代表實作 IEnumerable的類型。
如果 為 addMethod
,newExpression
則為 null
。類型或其基底類型必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只接受一個自變數。 如果 addMethod
不是 null
,它必須代表一個名為 「Add」 的實例方法, (不區分大小寫的) 只有一個參數。 每個項目的 initializers
屬性所Type代表的類型必須可指派給 add 方法的自變數類型。
所Initializers傳ListInitExpression回 的 屬性包含 每個專案的initializers
型別ElementInit專案。 Arguments每個 項目的 Initializers 屬性都是單一集合,其中包含的initializers
對應專案。 AddMethod的每個 元素Initializers的 屬性等於 addMethod
。
Type產生的 ListInitExpression 屬性等於 newExpression
。類型。
適用於
ListInit(NewExpression, MethodInfo, Expression[])
建立 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 屬性設定為指定的值。
例外狀況
newExpression
.Type 未實作 IEnumerable。
-或-
addMethod
不是 null
,它不表示名為 "Add" (區分大小寫) 的執行個體方法,這個方法剛好只採用一個引數。
-或-
addMethod
不是 null
,且 initializers
之一個或多個項目的 Type 屬性表示的類型無法指派給 addMethod
所表示之方法的引數類型。
addMethod
是 null
,且 newExpression
.Type 或其基底類型上沒有採用一個類型相容引數之名為 "Add" 的執行個體方法。
備註
的 TypenewExpression
屬性必須代表實作 IEnumerable的類型。
如果 為 addMethod
,newExpression
則為 null
。類型或其基底類型必須宣告名為 「Add」 的單一方法, (不區分大小寫的) ,該方法只接受一個自變數。 如果 addMethod
不是 null
,它必須代表一個名為 「Add」 的實例方法, (不區分大小寫的) 只有一個參數。 每個項目的 initializers
屬性所Type代表的類型必須可指派給 add 方法的自變數類型。
所Initializers傳ListInitExpression回 的 屬性包含 每個專案的initializers
型別ElementInit專案。 Arguments每個 項目的 Initializers 屬性都是單一集合,其中包含的initializers
對應專案。 AddMethod的每個 元素Initializers的 屬性等於 addMethod
。
Type產生的 ListInitExpression 屬性等於 newExpression
。類型。