C# 如何使为数组赋值成为可能,同时使每个数组元素无法单独赋值?

C# 如何使为数组赋值成为可能,同时使每个数组元素无法单独赋值?,c#,arrays,unity3d,properties,indexer,C#,Arrays,Unity3d,Properties,Indexer,我正在处理Unity3D项目,并使用Mesh类, 在网格类中有一个成员变量Vector3[]顶点 现在,在设置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; 设置单个元素,如下所示:网格。顶点[0]=新向量3(1,1,1)似乎没有效果。

我正在处理Unity3D项目,并使用
Mesh
类,
网格
类中有一个成员变量
Vector3[]顶点

现在,在设置
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; 
设置单个元素,如下所示:
网格。顶点[0]=新向量3(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.
  }
}

如何使客户端能够将数组分配给我的成员变量,但阻止他将值分配给数组中的单个元素?

如果不希望直接访问集合元素,请将其设置为专用字段并提供设置数组的方法。如果您愿意,您还可以提供一种方法,将阵列副本作为单独的参考返回。

如果我们这些不想麻烦地安装Unity3d环境的人愿意提供有关您尝试模拟的Unity3d场景的更多详细信息,您可以扩大您的提问范围。具体来说:当你说“不可能”时,那到底是什么意思?你有错误吗?运行时间?编译时间?更新顶点值是否没有任何效果?
网格
类及其
顶点
成员的Unity3d声明是什么?那是一块地吗?基于源代码的属性。每次访问
顶点时,它可能会创建一个新数组,这意味着更新该数组实际上不会更新
网格
对象内部的任何内容。因此,如果您执行了
public int[]Grades{get{var r=new int[Grades.Length];Grades.CopyTo(r,0);return r;}set{Grades=value;}
,这可能会使您获得所需的行为。非常感谢。为什么我被否决了?