在电脑前又是一天,后来脑子也糊里糊涂,可能是基础还不牢固,设置断点,找了找问题才发现数组定义出了问题,
我是这样定义数组的,string[] auths ; string auths=new string[]{} 等等
程序第一次报错,未实例化对象,什么情况这是,我以为是写遍历队列的问题,那个队列声明为全局了,后来值也能传给重新定义的测试string 变量,也没问题啊。
再后来才知道未实例化数组,数组也要实例化,以前觉得可以信手哪来就用,在c#上的托管堆上,没有实例化对象是没法用的。实例化数组
string[] auths = new string[5]; //这样写就没问题了
string[] codes= new string[5] { "", "", "", "", "" }; 这个是赋值的写法
第二个问题:
因为我要赋值给数组5个数之后,清空数组。
于是我用了这个写法
 auths = null;
                    codes = null;
结果就是第一个问题解决了之后,又出现了未实例化对象的报错,靠,此时脑袋有点不爱动了,后来才慢慢体会到实例化对象的用处
赋值给null之后,等于释放了内存堆的对象,等于new的对象失效了。两个问题叠加在一起,幻觉出现。编程就是这么有趣,同时
也是枯燥,若值不为空的话,还得考虑一次读取队列中5个值,若队列最后不足5个的时候,数组后几位的值肯定是错的,那程序在结尾肯定会出现问题。
于是开始想若数值不足5个的情况怎么处理。
下边程序作为一个记录吧,提醒自己。改天想想如何添加不足5个的情况,总数取余吗,那我的add里边的有好几个参数没有值咋整,可以在add方法里边判断,我的输出pdf一行画 5个图,还得写一行画四个图,一行3个,一行2个,一行1个的程序啊。
 string[] auths = new string[5];
            string[] codes= new string[5] ;
 foreach (FileContent fc in filecontents)
            {
                kkk=fc.Cardid;
                auths[i] = fc.Cardid.ToString();
                codes[i] = fc.Autcode;
                ++i;
                if(i==5)
                {
                    cd.Add(new code(codes[0], codes[1], codes[2], codes[3], codes[4], codes[0], codes[1], codes[2], codes[3], codes[4], auths[0], auths[1], auths[2], auths[3], auths[4]));
                    i = 0;
                }
               
            }
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号