当前位置: 首页 > 编程语言 > C#

将同一个对象添加到两个List变量时,是否在进程中克隆了对象?分享

时间:2023-04-10 23:58:53 C#

C#:将同一个对象添加到两个List变量时,是否在进程中克隆了对象?我有类似的东西://Declarations:Listlist1=newList();列表list2=newList();...SomeTypesomething=newSomeType("SomeName");list1.Add(某物);list2.Add(某物);...list1[indexOfSomething]=newSomeType("SomeOtherName");并且list2中的对象没有改变......这是预期的结果吗?是的,但没有任何克隆。在分配之前,相同的对象在两个列表中。分配后,两个列表中有两个唯一的对象。这样做:list1[indexOfSomething].name="SomeOtherName";而list2的对象也会发生变化。//声明:Listlist1=newList();列表list2=newList();...SomeTypesomething=newSomeType("SomeName");list1.Add(某物);list2.Add(某物);请记住,当您将一个对象添加到列表时,您实际上只是在添加一个指向该对象的指针。在这种情况下,list1和list2都指向内存中的同一个地址。list1[indexOfSomething]=newSomeType("SomeOtherName");现在您已将元素list1分配给不同的指针。您并没有真正克隆对象,而是复制恰好指向同一对象的指针。如果您需要证书,请执行以下操作:SomeTypesomething=newSomeType("SomeName");list1.Add(某物);list2.Add(某物);list1[someIndex].SomeProperty="Kitty";boolareEqual=list1[someIndex].SomeProperty==list2[someIndex].SomeProperty;areEqual应该是真的。指针摇滚!您不是在克隆对象;您要在两个列表中添加对同一对象的引用。但是,您的代码将其中一个列表中的引用替换为对另一个对象的引用,所以是的,这是预期的行为。您正在用对新对象的引用替换列表中的引用。如果您改为更改对象的属性,您会看到它在两个地方都发生了变化,因为引用将保持不变。是的,您没有克隆该对象。最初通过引用将对象添加到两个列表,然后将列表中的引用分配给您创建的新对象。这绝对是预期的结果。当您将“某物”对象传递给Add时,您是按值传递(c#默认值),而不是按引用传递是的,这是预期的。仅添加对对象的引用。不是参考本身或副本。以上是C#学习教程:C#:将同一个对象添加到两个List变量时,是否在进程中克隆了对象?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: