数组A=数组B 与 数组A.CopyTo(数组B, 0) 这两种方式有什么差别?

路人甲cw 2011-06-17 08:32:42
代码如下:
_cards = tempCards;
tempCards.CopyTo(_cards, 0);

两个数组都是引用类型,如果是值类型呢?
...全文
257 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bruce128 2011-06-17
  • 打赏
  • 举报
回复
数组在C#里是引用类型,等于操作相当于两个指针指向了内存的同一段内容。
copyTo操作则是重新开辟了一段内存。
路人甲cw 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qgqch2008 的回复:]

深度复制与浅度复制
[/Quote]
深度复制与浅度复制?
以下两种复制结果一样,最终还是指向的同一个实例:

class Program
{
static void Main(string[] args)
{
MyClass[] myClass1 = new MyClass[1];
MyClass[] myClass2 = new MyClass[1];

myClass1[0] = new MyClass();
myClass1[0].i = 1;

//myClass1.CopyTo(myClass2, 0);
myClass2 = myClass1;

myClass2[0].i = 2;

Console.WriteLine("myClass1[0].i:{0},myClass2[0].i:{1}", myClass1[0].i, myClass2[0].i);
Console.ReadKey();
}
}
class MyClass
{
public int i = 0;
}
qgqch2008 2011-06-17
  • 打赏
  • 举报
回复
深度复制与浅度复制
路人甲cw 2011-06-17
  • 打赏
  • 举报
回复
比如( ->是指向实例 ):
tempCards和_cards是同一类型,现用tempCards做_cards的随机排序

tempCards[1] -> _cards[3]
tempCards[2] -> _cards[1]
tempCards[3] -> _cards[4]
tempCards[4] -> _cards[5]
tempCards[5] -> _cards[8]
tempCards[6] -> _cards[7]
tempCards[7] -> _cards[2]
tempCards[8] -> _cards[6]

重新给_cards赋值
_cards[1] -> tempCards[1]
_cards[2] -> tempCards[2]
_cards[3] -> tempCards[3]
_cards[4] -> tempCards[4]
_cards[5] -> tempCards[5]
_cards[6] -> tempCards[6]
_cards[7] -> tempCards[7]
_cards[8] -> tempCards[8]

现在的问题是下面两种赋值方式有没有什么不同,假设其他地方之前已经有对_cards实例的引用:
_cards = tempCards;
tempCards.CopyTo(_cards, 0);

路上的程序员 2011-06-17
  • 打赏
  • 举报
回复
引用类型
第一种,两者引用同一个对象,
第二种,两者引用两个对象,虽然值一样。
值类型
第一种与第二种,都是两者为两个对象。
porschev 2011-06-17
  • 打赏
  • 举报
回复

这两个应该算是C++里“深拷贝”和“浅拷贝”的区别吧
porschev 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gaoqiangz 的回复:]

tempCards只是把_cards排了个序,书上说,如果采用等号的方式那么其他代码如果有对_cards实例的引用将会没有排序的效果
[/Quote]

没看懂意思。。。用等号。。。。如果修改了A和B任何一个。。。他们两都会被修改。。。
他们的指向的是同一个
路人甲cw 2011-06-17
  • 打赏
  • 举报
回复
tempCards只是把_cards排了个序,书上说,如果采用等号的方式那么其他代码如果有对_cards实例的引用将会没有排序的效果
机器人 2011-06-17
  • 打赏
  • 举报
回复
第一种都指向同一块内存地址,修改谁都会影响到对方

第二种是将一块内存的值都复制里一个内存里

第一种申明类型,直接赋值即可,第二种需要提前new
porschev 2011-06-17
  • 打赏
  • 举报
回复


等号是把B的引用给了A,A和B指向同一个对象

CopyTo是把B完全复制一份给A,现在有了两个对象。。

这是我的理解。。。

110,572

社区成员

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

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

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