2016-02-02 3 views
2

я называю укомплектованную процедуру из моего кода, и он возвращает мнеКак изменить значение свойства динамического объекта в C#?

IEnumerable<dynamic> data 

3 свойства

Я хотел бы быть в состоянии изменить один из значения вара данных для Exemple

data[2].ID = 6687687 

Вы знаете, как это сделать, пожалуйста?

ответ

2

Вы можете получить доступ к отдельным элементам с помощью метода ElementAt так:

data.ElementAt(2).ID = 6687687; 

Однако это не является эффективным, поскольку он будет перебирать перечислимое, пока он не достигнет требуемого индекса. И иногда перечислимый, который вы получите, будет выполнять какой-то запрос каждый раз, когда вы его перечисляете. Это означает, что вы будете получать новые объекты каждый раз, когда вы его перечисляете (например, через ElementAt).

Лучший способ преобразовать перечислимы в список, как это:

var list = data.ToList(); 

А затем получить доступ к элементам по индексу, как это:

list[2].ID = 6687687; 
+0

спасибо, что ответит! но он отображает ошибку триггера, которая сообщает мне, что количество аргументов неверно для вызова méthod 'System.Object SetValue (System.String, System.Object, Boolean) – lambdaDev

+0

Вы уверены, что базовый тип поддерживает установку свойства 'ID' как целое число? –

+0

yes Я уверен, что это int – lambdaDev

2

Вы можете использовать следующий код:

var lItem = data.ElementAt(2); 
lItem.ID = 6687687; 

Однако обратите внимание, что это может иметь плохую производительность во время работы, когда используется для доступа ко многим разные индексы, а IEnumerable не имеет «простого» объекта списка в качестве основы.

Смежные вопросы