打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于C#中ArrayList中保存结构的用法。
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;}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java解世界最难九宫格问题 – 码农网
c#中结构struct的用途
GlobeControl 获得Geographic 坐标
C#设计模式(16)——迭代器模式(Iterator Pattern)
java常用集合类详解(有例子,集合类糊涂的来看!) .
C#的类的创建简单继承
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服