我有一个存储 ax、y 和 z 值的“Vector”结构。为了使它们更易于访问,我添加了一个索引运算符,如下所示:
public struct Vector
{
public double x;
public double y;
public double z;
public double this[int i]
{
get
{
if(i == 0) return x;
else if(i == 1) return y;
else if(i == 2) return z;
else throw new ArgumentOutOfRangeException("i", i, "Index must be 0, 1, or 2");
}
set
{
if (i == 0) x = value;
else if (i == 1) y = value;
else if (i == 2) z = value;
else throw new ArgumentOutOfRangeException("i", i, "Index must be 0, 1, or 2");
}
}
}
注意:通常我会使用数组而不是 x、y、z,但我正在使用预先存在的代码,此时很难重构。
现在,如果我在类中使用结构作为自动属性,然后尝试修改它的 xyz 值,我会得到这个
public Vector v{ get; set; }
void funct(){
for(int i = 0; i < 3; i++)
{
v[i] = 3.0;
}
}
我得到一个编译器错误:
“无法修改“v”的返回值,因为它不是变量”
我已经尝试在谷歌上搜索错误,但我认为没有人像我一样这样做(我猜这是一个非常有趣的案例,而且可能真的很丑)。解决这个问题的正确方法是什么?像这样使用索引运算符有错吗?
注意:是的,我知道这是一个可变结构。再次,预先存在的代码