Я помню, как сталкивался с подобным источником путаницы некоторое время назад со свойством DataRow.ItemArray
Это свойство было крайне нелогичным по той же причине, по которой свойство Items
в вашем примере кажется таким странным.
Что в конечном итоге было настолько запутанным, так это то, что свойство было спроектировано так, чтобы оно было скопировано с и присваивается , как вы обычно делаете с полем типа значения (например, int
, double
и т. д.).То есть, чтобы изменить элемент с индексом 2, это не будет работать:
row.ItemArray[2] = "New Value";
Приведенный выше код по существу скопирует значения из строки в новый массив, возьмет эту копиюи установите значение в индексе 2 на «Новое значение», и тогда новый массив будет сразу же вне области видимости.В моей книге предполагалось работать следующим образом:
object[] items = row.ItemArray;
items[2] = "New Value";
row.ItemArray = items;
Очень нелогично, в моей книге (примечание для разработчиков библиотеки: не делаютэто ).Но похоже, что это, вероятно, проблема, стоящая за проблемой, с которой вы столкнулись в своем коде.
Другими словами, я думаю, что код обмена у вас (сейчас) правильный.Проблема заключается в том, у кого бы ни была яркая идея заставить это свойство Items
вести себя так, как будто это поле значения.