关于List存值得问题

OrdinaryCoder 2019-03-25 10:27:38

static void Main(string[] args)
{
List<TestClass> list = new List<TestClass>();
list.Add(new TestClass(1));
list.Add(new TestClass(2));
list.Add(new TestClass(3));
list.Add(new TestClass(4));

var test = list.SingleOrDefault(x=>x.a == 3);
Console.WriteLine("test的Hash码:{0}", test.GetHashCode());
Console.WriteLine("list[2]的Hash码:{0}", list[2].GetHashCode());
test = new TestClass(1024);
Console.WriteLine("test的Hash码:{0}", test.GetHashCode());
Console.WriteLine("list[2]的Hash码:{0}", list[2].GetHashCode());

}


list[2]中到底存的是什么,为什么改变test的引用list[2]没有变
...全文
142 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-03-25
  • 打赏
  • 举报
回复
引用 4 楼 stherix 的回复:
[quote=引用 3 楼 OrdinaryCoder 的回复:]
list[2]指向的还是原对象


是的,就像c++多个指针 指向同一个地址,但是其中一个指向的地址变了,并不会影响其他的[/quote]
谢谢,明白了。
stherix 2019-03-25
  • 打赏
  • 举报
回复
引用 3 楼 OrdinaryCoder 的回复:
list[2]指向的还是原对象
是的,就像c++多个指针 指向同一个地址,但是其中一个指向的地址变了,并不会影响其他的
OrdinaryCoder 2019-03-25
  • 打赏
  • 举报
回复
list[2]指向的还是原对象
OrdinaryCoder 2019-03-25
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
var test = list.SingleOrDefault(x=>x.a == 3);
这个时候 test的确是list[2]同引用
但是test = new TestClass(1024);
你都给test赋了个新值
test的引用已经改了,list[2]还是原来的对象引用

谢谢,大致明白了,test = new TestClass(1024);这步并没有改变原来对象的内存,只不过哦是将引用指向改变了,这么理解没错吧。
stherix 2019-03-25
  • 打赏
  • 举报
回复
var test = list.SingleOrDefault(x=>x.a == 3); 这个时候 test的确是list[2]同引用 但是test = new TestClass(1024); 你都给test赋了个新值 test的引用已经改了,list[2]还是原来的对象引用

111,094

社区成员

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

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

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