C#结构数组和赋值性能

本文关键字:赋值 性能 数组 结构 | 更新日期: 2023-09-27 18:27:59

假设我有这样的代码:

struct Normal
{
    public float x;
    public float y;
}
class NormalContainer
{
   public Normal[] Normals
   {
       get; set;
   }
}
class Main
{
     void Run( NormalContainer container )
     {
         Normal[] normals = container.Normals // 1 - see below
         normals[5].x = 4;                    // 3 - see below
         container.Normals = normals;         // 2 - see below
     }
}

(1)是创建数组的副本,还是引用数组占用的内存?(2)怎么样?

感谢

C#结构数组和赋值性能

Array是一个引用类型,所以您只是将引用复制到数组实例。

C#中的数组是一种引用类型。像赋值这样的项会创建引用与值的副本。在(1)的末尾,您得到了存储在container 中的数组的本地引用

注意:在C#中,更恰当的说法是"引用对象"与"引用内存"

(1)复制数组的引用

(2) 相同

数组变量是引用类型,无论其基础元素类型如何,因此无论何时将数组变量分配给另一个,都只是在复制引用。