如何使值可以为数组赋值,同时使得不可能单独分配每个数组元素?

问题描述 投票:-1回答:1

我正在使用Unity3D项目并使用Mesh类, 在Mesh类里面有一个成员变量Vector3[] vertices。 现在,可以通过以下方式设置mesh.vertices

Vector3[] v = new Vector3[3];
v[0] = new Vector3[0,0,0];
v[1] = new Vector3[1,1,1];
v[2] = new Vector3[2,2,2];
mesh.vertices = v; 

设置一个单独的元素,像这样:mesh.vertices[0] = new Vector3(1,1,1)似乎没有效果。 (另外,mesh.vertices[0].x = 5也没有效果)。 当我说没有效果时,我的意思是代码编译并运行没有错误,但数组的元素没有改变。 由于顶点代表一个表面,设计师希望将它们一起更改似乎是合乎逻辑的。

我试图用一个简单的代码模仿这个神奇的功能无济于事。 我错过了什么? 属性是什么? 索引器? 有些奇怪的组合?

class Student
{
  private int[] grades = {92, 99, 96};
  public int[] Grades{
      get{
          Console.WriteLine("getter: ");
          return grades;
      }
      set{
          Console.WriteLine("setter: ");
          grades = value;
      }
  }
}

class HelloWorld
{
  static void Main ()
  {
    int[] low_grades = {53, 51, 55};
    Student student = new Student();
    student.Grades = low_grades; // This assignment is possible and this is O.K.
    student.Grades[0] = 52;  // This assignment is Possible and this is NOT O.K.
  }
}

如何让客户端为我的成员变量分配一个数组,但是阻止他为数组中的各个元素赋值?

c# arrays unity3d properties indexer
1个回答
1
投票

如果您不想直接访问set元素,请将其设置为私有字段并提供设置数组的方法。如果需要,还可以提供一种方法来返回数组的副本作为单独的引用。

© www.soinside.com 2019 - 2024. All rights reserved.