2015-03-08 3 views
0

Я отслеживаю объект-узел, который я хотел бы изменить позже (на другой тип и, следовательно, повторно назначить его). Это из элемента массива, к которому у меня позже не будет доступа.Как изменить элемент массива позже?

Я не могу просто отслеживать объект и повторно назначать его, потому что он просто переопределит переменную, а не фактический объект, являющийся частью массива. В основном я ищу рефлексивную семантику, но без использования методов.

Мое текущее обходное решение - это просто отслеживание массива, частью которого является элемент, и индекс, в котором находится объект, но имеющий две переменные, просто для того, чтобы сделать это, кажется грязным. Наверняка есть лучший способ?

+1

Звучит как проблема X-Y. Каково фактическое бизнес-требование, для которого это предложение? –

ответ

2

Вы можете использовать делегат для хранения назначения (эту работы с любыми другими типами/сценариями тоже, в том числе «не может передать свойство по ссылке» случай):

var captureIndex = index; 
var captureArray = array; 
Action<string> updateItLaterWith = v => captureArray[captureIndex] = v; 

// ....And when finally decided to update 
updateItLaterWith("Done!!!"); 

Пример показывает защиту от захвата неправильных значений (т.е. если index изменяется позже, но перед вызовом делегату), вам может не понадобиться такая сложность, и может быть достаточно v => array[index];.

+0

Хорошая идея! благодаря –

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