public struct Point
{
public int x;
public int y;
}
当我应用这个结构时,如下:
ArrayList alTemp = new ArrayList();
Point ptTemp;
ptTemp.x = 10;
ptTemp.y = 20;
alTemp.Add(ptTemp);
((Point)alTemp[0]).x = 15..........〉这句编译出错
CS0131 赋值号左边必须是变量,属性,或索引器!
请问如何能完成以上出错的语句。
这不是ArrayList的问题,而是与ValueType的box/unbox有关:
ArrayType只能接受Object,所以alTemp.Add(ptTemp)实际上是将ptTemp对象box,然后将box后的对象加到ArrayList里面。
同样,((Point)alTemp[0])实际上是把alTemp[0]这个box过的Object进行unbox,C#编译器会在堆栈上建立一个临时的Point对象,然后把alTemp[0]中那个对象的x/y数据copy过来。
由于堆栈上的只是临时对象,你对它的修改不会影响alTemp[0]的值,所以C#编译器对这种情况报错。
解决的办法:
public interface IPoint {
public int x {get;set}
public int y {get;set}
}
public struct Point : IPoint
{
private int _x;
private int _y;
public int x {
get { return _x; }
set { _x = value; }
}
public int y {
get { return _y; }
set { _y = value; }
}
}
...
alTemp.Add(pTemp);
((IPoint)alTemp[0]).x = 15; //This should be fine.
Interface定义错了! :p
public interface IPoint {
int x {get;set;}
int y {get;set;}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。