c# 如何实现数组的部分复制

dyiajure 2009-12-30 09:27:15
其实很简单,能像c++那样通过数组的地址指针选择开始复制的位置,比如
int buffer[]=new int[10000];
memset(buffer,0,100);
memcpy(buffer+100,srcbuf,9900);
在c#下我只会新建一个数组,然后用Array.CopyTo()来实现,效率差很多,希望各位给指点下
...全文
896 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
滕林阁 2010-04-10
  • 打赏
  • 举报
回复
项~~受用~~
dyiajure 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ctwei86 的回复:]
C#中好像是不可以直接使用指针的,因此如果你要把C++、C里面的思想完全照搬过来用,有的时候可能会碰到很大的障碍,毕竟是不同的语言。从效率上来讲它肯定不如C++和C,如果楼主执着的追求效率,可能会丧失掉OOP的很多东西。当然这只是我的个人观点,希望对楼主有用。
[/Quote]
谢谢,你给我提供了其他思路,我看看能不能从结构上调整下,另外我想问下,有没有方法可以c++和c#混用的?
dyiajure 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hhc123 的回复:]
GetBuffer
memset那你可以把这两个C++的引到C#里用
[/Quote]
GetBuffer是调用的dll库中的函数,改不了
ctwei86 2009-12-30
  • 打赏
  • 举报
回复
C#中好像是不可以直接使用指针的,因此如果你要把C++、C里面的思想完全照搬过来用,有的时候可能会碰到很大的障碍,毕竟是不同的语言。从效率上来讲它肯定不如C++和C,如果楼主执着的追求效率,可能会丧失掉OOP的很多东西。当然这只是我的个人观点,希望对楼主有用。
hhc123 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dyiajure 的回复:]
是我没说清楚吧,我不想用这个方法,因为在循环中效率很低,
我要实现的是这样的C++代码
int buffer[]=new int[10000];
memset(buffer,0,100);
GetBuffer(buffer+100,9900);
只是我在c#中是用Array.CopyTo()来实现的,我想提高效率,不知道该怎么做

[/Quote]
GetBuffer
memset那你可以把这两个C++的引到C#里用
dyiajure 2009-12-30
  • 打赏
  • 举报
回复
是我没说清楚吧,我不想用这个方法,因为在循环中效率很低,
我要实现的是这样的C++代码
int buffer[]=new int[10000];
memset(buffer,0,100);
GetBuffer(buffer+100,9900);
只是我在c#中是用Array.CopyTo()来实现的,我想提高效率,不知道该怎么做
jflanmay 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ctwei86 的回复:]
C#中Array.Copy()方法有四种重载,其中有一个重载可以指定从数组的第几个元素开始复制,复制多少个。
[/Quote]

hhc123 2009-12-30
  • 打赏
  • 举报
回复
public virtual void CopyTo(
int index,
Array array,
int arrayIndex,
int count
)

Visual C++
public:
virtual void CopyTo(
int index,
Array^ array,
int arrayIndex,
int count
)

J#
public void CopyTo(
int index,
Array array,
int arrayIndex,
int count
)

JScript
public function CopyTo(
index : int,
array : Array,
arrayIndex : int,
count : int
)


参数
index
类型:System..::.Int32

源 ArrayList 中复制开始位置的从零开始的索引。

array
类型:System..::.Array

作为从 ArrayList 复制的元素的目标位置的一维 Array。Array 必须具有从零开始的索引。

arrayIndex
类型:System..::.Int32

array 中从零开始的索引,在此处开始复制。

count
类型:System..::.Int32

要复制的元素数。

这个是ArrayList的,
Array的没那么好用

public void CopyTo(
Array array,
long index
)

Visual C++
[ComVisibleAttribute(false)]
public:
void CopyTo(
Array^ array,
long long index
)

J#
/** @attribute ComVisibleAttribute(false) */
public void CopyTo(
Array array,
long index
)

JScript
public function CopyTo(
array : Array,
index : long
)


参数
array
类型:System..::.Array

一维 Array,它是从当前 Array 复制的元素的目标位置。

index
类型:System..::.Int64

一个 64 位整数,它表示 array 中复制开始处的索引。


kensouterry 2009-12-30
  • 打赏
  • 举报
回复
查MSDN吧!会有帮助的
lee_b 2009-12-30
  • 打赏
  • 举报
回复
http://www.bsdlover.cn/html/1/1-1831.html
可以看下这个,写的很详细
xm18love 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ctwei86 的回复:]
C#中Array.Copy()方法有四种重载,其中有一个重载可以指定从数组的第几个元素开始复制,复制多少个。
[/Quote]UP
ctwei86 2009-12-30
  • 打赏
  • 举报
回复
C#中Array.Copy()方法有四种重载,其中有一个重载可以指定从数组的第几个元素开始复制,复制多少个。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧