C# 如何使为数组赋值成为可能,同时使每个数组元素无法单独赋值?
我正在处理Unity3D项目,并使用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)似乎没有效果。
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;}
,这可能会使您获得所需的行为。非常感谢。为什么我被否决了?