C # memcpy эквивалент для векторов (C # List & lt; T & gt;) (синтаксический сахар)

Я нахожусь в процессе преобразования старой библиотеки C ++ в C #.

Библиотека C ++ сильно зависит от перезапись определенные элементы std::vector<T> используя memcpy(&source[d_index],&source[s_index],count*sizeof(<T>)); (обратите внимание, что источник и цель здесь одинаковы, только разные индексы)

Мой C # порт этого (путем реализации ICloneable а также source очевидно, будучи List<T> где T является ссылочным типом)

 for (int i = 0; i < count; i++)
source[d_index + i] = source[s_index + i].Clone();

Это работает как положено.

Тем не менее, мой вопрос: есть ли более простая версия? Я явно не могу использовать List.InsertRange(d_index, List.GetRange(s_index, count)) потому что этот метод вставки вместо перезаписи.

Я не могу использовать List<T>.CopyTo Method (Int32, T[], Int32, Int32) либо в качестве пункта назначения должен быть массив T[] а не сам список.

Есть ли метод, который делает то, что memcpy делает для этого конкретного примера? Я знаю, что могу легко реализовать метод расширения самостоятельно, мне просто интересно, пропустил ли я что-то в MSDN.

1

Решение

Я сам столкнулся с этой проблемой и пришел к такому же выводу: либо используйте Clone, либо создайте конструктор копирования самостоятельно.

Для метода CopyTo я забыл, но разве он просто не копирует ссылки снова? Кроме того, вы можете сохранить их в массив, как вы сказали, и использовать AddRange (массив).

1

Другие решения

Как насчет RemoveRange, а затем вставить диапазон? Очевидно, только если диапазоны не перекрываются.

0

По вопросам рекламы [email protected]