C#memcpy等价于载体(C#List<;T>;)(句法糖)

本文关键字:gt 等价于 句法 C#List C#memcpy lt | 更新日期: 2023-09-27 18:25:59

我正在将一个旧的C++库转换为C#。

C++库在很大程度上依赖于通过使用memcpy(&source[d_index],&source[s_index],count*sizeof(<T>));覆盖std::vector<T>的某些元素(注意,这里的源和目标是相同的,只是索引不同)

我的C#端口(通过实现ICloneablesource显然是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上的一些东西。

C#memcpy等价于载体(C#List<;T>;)(句法糖)

我自己也遇到过这个问题,我得出了相同的结论,要么使用克隆,要么自己创建复制构造函数。

对于CopyTo方法,我忘记了,但它不是只是再次复制引用吗?除此之外,您可以按照所说的将它们保存到一个数组中,并使用AddRange(array)。

RemoveRange,然后是Insert range怎么样?显然,只有当范围不重叠时。