日期:2014-05-20  浏览次数:20667 次

高手进,在线等!关于如何定义数据!
我要写类似于Windows桌面的程序。
每个图标对应了一个结构
public   struct   iItem
        {
                public   PictureBox   ptBox;
                public   string   strText;
                public   Image   img;
                public   bool   bParent;
                public   Point   pt;
                public   ArrayList   childs;
                public   string   dll;
                public   string   funcname;
                public   bool   bSelect;
}
public   ArrayList   lists;

现在的问题:结构是值传递的,我如果修改了某个变量。还要把改变后的iItem再加进到lists里面。
例如:iItem   item   =   (iItem)lists[0];
item.bSelect   =   ture;
lists[0]   =   item;

真是太麻烦了,如果我用类来定义这个数据结构,会不会效率比较低?如果有做过类似程序的,都怎么定义数据结构的?谢谢!



------解决方案--------------------
自定义的 class, 而不是这样的结构体、也不要使用这样的List。

List 就是这样,除非你自己实现一个。



------解决方案--------------------
在你的结构中加一个方法
public struct iItem
{
public PictureBox ptBox;
public string strText;
public Image img;
public bool bParent;
public Point pt;
public ArrayList childs;
public string dll;
public string funcname;
public bool bSelect;
public void SetValue(iItem value)
{
this.ptBox = value.picture;
this.strText = value.strText;
......
}
}
写一次就行了以后就
iItem item = (iItem)lists[0];
item.bSelect = ture;
lists[0].SetValue(item);
要不就用运算符号重载,你以后用c++的这个应该没问题吧
------解决方案--------------------
结构是值类型的添加到一般的集合中要进行装箱,使用时取出来又要拆箱,拆箱后的值是不可能又给你装箱的,解决办法:
1: 使用class,class不会使效率降低,要存入集合中,反而性能会提高,因为避免了装箱拆箱的动作.
2: C#2.0的话如果坚持要用结构,建议你可以使用范型集合,比如说List.