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#端口(通过实现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上的一些东西。
我自己也遇到过这个问题,我得出了相同的结论,要么使用克隆,要么自己创建复制构造函数。
对于CopyTo方法,我忘记了,但它不是只是再次复制引用吗?除此之外,您可以按照所说的将它们保存到一个数组中,并使用AddRange(array)。
RemoveRange,然后是Insert range怎么样?显然,只有当范围不重叠时。