关于.clone

sunkai572 2009-10-13 10:11:08

string[][] B = (string[][])array.Clone();//一个大小长度和array一样的数组,用以存放包含term的句子数。

////以下为找出包含同一个词的句子的个数
for (int i = 0; i < sentenceN; i++)
{
for (int j = 0; j < array[i].Length; j++)
{
for (int x = 0; x < sentenceN; x++)
{
for (int y = 0; y < array[x].Length; y++)
{
if (array[i][j] == array[x][y])
B[x][y] = (containN++).ToString();
break;
}
}
}
}



为什么B[x][y]一动,array[i][j]所对应的值也会变动?是不是array.Clone()这个方法的问题?情指教,谢谢!
有的人说,用深度clone(),请问要如何用?
...全文
101 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunkai572 2009-10-13
  • 打赏
  • 举报
回复
那要怎么办?
vwxyzh 2009-10-13
  • 打赏
  • 举报
回复
lz的类型是string[][],即数组的数组,所以一般的Clone和Copy都没法解决问题,他们都只复制了最外层的数组,而内层的数组实例都没有被复制,也就是和原来是相同的实例
sunkai572 2009-10-13
  • 打赏
  • 举报
回复
那请问我这里要如何改写?我把原来的那个.clone改成了.copyto()但还是提示有错误。
错误 1 “CopyTo”方法没有采用“0”个参数的重载 D:\研究\WindowsApplication1(9.7.)\WindowsApplication1(7.29.)\WindowsApplication1\Form1.cs 89 32 WindowsApplication1
netstarman 2009-10-13
  • 打赏
  • 举报
回复
你现在 B[][] 获得的是Array的起始地址。也就是说数组B和Array现在是指向同一个地址。所以B的值改变Array 的值也会随着变化。
数组中类似深度拷贝的方法应该是Copy与ToCopy。
yczf1836 2009-10-13
  • 打赏
  • 举报
回复
你查查MSDN这个 ICloneable 接口
yczf1836 2009-10-13
  • 打赏
  • 举报
回复
你的问题已经说明浅复制和深复制的区别了。浅复制就是引用了同一个对象。只是复制了原本的结构。深复制不仅仅复制了结构了,而且复制了数据,在内存里开辟了一个新的对象。所有的深复制都用到了
Object.MemberwiseClone()方法。
l8487 2009-10-13
  • 打赏
  • 举报
回复
Clone,浅拷贝,它的实现就是把要拷贝的对象的值,一一的赋值给要拷贝的对象。这里要注意:一一赋值。如果是堆对象,其实就是类似于C语言中的指针拷贝。
Copy,深拷贝,它的实现是把自己拥有的东西,重新Create一份,交给要Copy的对象。这样它们就具有了2份一样的财富。 彼此之间除了量上相等意外,没有其他联系。

引用类型与值类型。。。

110,538

社区成员

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

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

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