Поделиться через


Expression.ListInit Метод

Определение

Создает объект ListInitExpression.

Перегрузки

ListInit(NewExpression, IEnumerable<ElementInit>)

Создает ListInitExpression, использующий указанные объекты ElementInit для инициализации коллекции.

ListInit(NewExpression, IEnumerable<Expression>)

Создает ListInitExpression, использующий метод с именем "Добавить" для добавления элементов в коллекцию.

ListInit(NewExpression, ElementInit[])

Создает ListInitExpression, использующий указанные объекты ElementInit для инициализации коллекции.

ListInit(NewExpression, Expression[])

Создает ListInitExpression, использующий метод с именем "Добавить" для добавления элементов в коллекцию.

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, и свойствами NewExpression и Initializers, для которых заданы указанные значения.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов 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>)

Исходный код:
ListInitExpression.cs
Исходный код:
ListInitExpression.cs
Исходный код:
ListInitExpression.cs

Создает 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, для которого задано указанное значение.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов initializers имеют значение null.

newExpression.Type не реализует IEnumerable.

В newExpression или его базовом типе не объявлен метод экземпляра с именем "Добавить" (без учета регистра).

-или-

Метод "Добавить" в newExpression.Type или его базовом типе не принимает ровно один аргумент.

-или-

Тип, представленный свойством Type первого элемента initializers, невозможно назначить типу аргумента метода "Добавить" в newExpression.Type или его базовом типе.

-или-

В newExpression.Type или его базовом типе есть несколько методов с именем "Добавить" (без учета регистра), совместимых с аргументом.

Комментарии

Свойство TypenewExpression должно представлять тип, реализующий IEnumerable.

Чтобы использовать эту перегрузку ListInit(NewExpression, IEnumerable<Expression>), . newExpression Тип или его базовый тип должен объявлять один метод с именем Add (без учета регистра), который принимает ровно один аргумент. Тип аргумента должен быть назначаемым из типа, представленного свойством Type первого элемента initializers.

Свойство Initializers возвращаемого ListInitExpression объекта содержит один элемент типа ElementInit для каждого элемента .initializers Свойство Arguments каждого элемента является Initializers одноэлементной коллекцией, содержащей соответствующий элемент .initializers Свойство AddMethod каждого элемента Initializers представляет метод add, обнаруженный в newExpression. Тип или его базовый тип.

Свойство Type результирующего ListInitExpression объекта равно 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, и свойствами NewExpression и Initializers, для которых заданы указанные значения.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов 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[])

Исходный код:
ListInitExpression.cs
Исходный код:
ListInitExpression.cs
Исходный код:
ListInitExpression.cs

Создает 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, для которого задано указанное значение.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов initializers имеют значение null.

newExpression.Type не реализует IEnumerable.

В newExpression или его базовом типе не объявлен метод экземпляра с именем "Добавить" (без учета регистра).

-или-

Метод "Добавить" в newExpression.Type или его базовом типе не принимает ровно один аргумент.

-или-

Тип, представленный свойством Type первого элемента initializers, невозможно назначить типу аргумента метода "Добавить" в newExpression.Type или его базовом типе.

-или-

В newExpression.Type или его базовом типе есть несколько методов с именем "Добавить" (без учета регистра), совместимых с аргументом.

Комментарии

Свойство TypenewExpression должно представлять тип, реализующий IEnumerable.

Чтобы использовать эту перегрузку ListInit(NewExpression, Expression[]), . newExpression Тип или его базовый тип должен объявлять один метод с именем Add (без учета регистра), который принимает ровно один аргумент. Тип аргумента должен быть назначаемым из типа, представленного свойством Type первого элемента initializers.

Свойство Initializers возвращаемого ListInitExpression объекта содержит один элемент типа ElementInit для каждого элемента .initializers Свойство Arguments каждого элемента является Initializers одноэлементной коллекцией, содержащей соответствующий элемент .initializers Свойство AddMethod каждого элемента Initializers представляет метод add, обнаруженный в newExpression. Тип или его базовый тип.

Свойство Type результирующего ListInitExpression объекта равно 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, для которого задано указанное значение.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов initializers имеют значение null.

newExpression.Type не реализует IEnumerable.

-или-

Значение addMethod не равно null и не представляет метод экземпляра с именем "Add" (без учета регистра), принимающий точно один аргумент.

-или-

Значение addMethod не равно null, а тип, представленный свойством Type одного или нескольких элементов параметра initializers, нельзя назначить для типа аргумента метода, представленного addMethod.

addMethod не равен null, и отсутствует метод экземпляра с именем "Add", принимающий один аргумент, совместимый с типом, для параметра newExpression.Type или его базового типа.

Комментарии

Свойство TypenewExpression должно представлять тип, реализующий IEnumerable.

Если addMethod имеет значение , то newExpression.null Тип или его базовый тип должен объявлять один метод с именем Add (без учета регистра), который принимает ровно один аргумент. Если addMethod значение не nullравно , он должен представлять метод экземпляра с именем Add (без учета регистра), который имеет ровно один параметр. Тип, представленный свойством Type каждого элемента , initializers должен быть назначен типу аргумента метода add.

Свойство Initializers возвращаемого ListInitExpression объекта содержит один элемент типа ElementInit для каждого элемента .initializers Свойство Arguments каждого элемента является Initializers одноэлементной коллекцией, содержащей соответствующий элемент .initializers Свойство AddMethod каждого элемента равно InitializersaddMethod.

Свойство Type результирующего ListInitExpression объекта равно 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, для которого задано указанное значение.

Исключения

Параметр newExpression или initializers имеет значение null.

-или-

Один или несколько элементов initializers имеют значение null.

newExpression.Type не реализует IEnumerable.

-или-

Значение addMethod не равно null и не представляет метод экземпляра с именем "Add" (без учета регистра), принимающий точно один аргумент.

-или-

Значение addMethod не равно null, а тип, представленный свойством Type одного или нескольких элементов параметра initializers, нельзя назначить для типа аргумента метода, представленного addMethod.

addMethod не равен null, и отсутствует метод экземпляра с именем "Add", принимающий один аргумент, совместимый с типом, для параметра newExpression.Type или его базового типа.

Комментарии

Свойство TypenewExpression объекта должно представлять тип, реализующий IEnumerable.

Если addMethod имеет значение , .nullnewExpression Тип или его базовый тип должны объявлять один метод с именем "Add" (без учета регистра), который принимает ровно один аргумент. Если addMethod значение не nullравно , он должен представлять метод экземпляра с именем Add (без учета регистра), имеющий ровно один параметр. Тип, представленный свойством Type каждого элемента , initializers должен быть назначен типу аргумента метода add.

Свойство Initializers возвращаемого ListInitExpression объекта содержит один элемент типа ElementInit для каждого элемента initializers. Свойство Arguments каждого элемента является Initializers одноэлементной коллекцией, содержащей соответствующий элемент .initializers Свойство AddMethod каждого элемента равно InitializersaddMethod.

Свойство Type результирующего ListInitExpression объекта равно newExpression. Тип.

Применяется к