item_md item_md = createitemunits();(你的意识是不是createitemunits()函数会反回一个item_md对象,如果createitemunits()的返回值是一个item_md类的对象的话还说得过去)另外你定义的类对象竟然和类同名,虽然用名字空间区分开来,但这也是写程序的大纪阿你的数组确实是因为没有初始化造成的错误要么你在类的定义里面写成
public class item_md : item {
        public string chemname;
        public parts_unit_md[] units = new parts_unit_md[10];
    }或者在掉用的时候
item_md.units = new parts_unit_md[j];(你这儿的item_md.units[]应该改为item_md.units)
而且这个在定义后大小不能改变
我觉得最好还是用ArrayList比较好

解决方案 »

  1.   

    谢谢,命名我以后注意。
    我用item_md.units = new parts_unit_md[rows.count]已经可以了。不过出现一个新问题,请大家赐教。我的rows.count有两条数据。程序执行item_md.units[j] = part_unit_md;的时候,第一次没问题,unit[0]数据放进去了,可执行第2条的时候“part_unit_md.partunit = (string)row["单位名称"];”怎么把unit[0]中的partunit值也改变了?第2次执行“item_md.units[j] = part_unit_md;”以后,我的unit[0]和unit[1]的值都成了第2次传过来的。请问如何解决?谢谢!
      

  2.   

    你在循环中用到的part_unit_md始终是一个对象,你只是在循环里不断的修改这个对象的成员值,而你每次实际上都是把这个对象付给unit[j],这样你数组里面的所有元素都是指向同一个对象的,当然unit[j]的值都只有一个解决的办法是把part_unit_md付给一个新的对象for (int j=0;j<=rows.Count;j++)
    {
    DataRow row = rows[j];
    AccountingServBase.parts_unit_md  xx = new(part_unit_md)
    xx.partunit = (string)row["单位名称"];
    item_md.units[j] = xx;
    }这样就OK了
    (这么多问题,楼主应该多给点分哦,而且你的那个变量命名方式害我半天没看懂意识,呵呵)