C# 结构体集合元素属性不可修改疑惑

时间:2021-07-09 09:05:13
【文件属性】:

文件名称:C# 结构体集合元素属性不可修改疑惑

文件大小:27KB

文件格式:RAR

更新时间:2021-07-09 09:05:13

C# Struct 结构体 集合 不可修改

背景:用C#的人都知道结构体在C#中是值类型的,由于这个原因出现了一个有趣的问题,那就是结构体集合通过数字索引修改对应属性的值能不能影响到集合中的结构体呢?答案很多人可能会说不能,因为结构体是值类型的那是一个副本;也可能有人说会,因为它是通过集合索引来操作的,集合本身时引用类型,集合索引取得的将是集合引用的一个地址按理应该也是引用类型的。 结论:结果可能会大跌眼镜,结果是C#编译器根本通不过这样的修改,有关文档的说法是值类型的数据是一个栈上的值,索引取出的是一个栈返回值是一个临时数据副本,即使能够修改结果也影响不到原有数据,所以编译器禁止做这样的操作。(C++中由于结构体是一个特殊的类属于引用类型因此没有这个问题)


【文件预览】:
StructDemo
----Program.cs(1KB)
----Properties()
--------AssemblyInfo.cs(1KB)
----StructDemo.csproj(3KB)
----App.config(189B)
----UserStruct.cs(277B)
----obj()
--------Debug()
----bin()
--------Debug()

网友评论