在電腦前又是一天,后來腦子也糊里糊塗,可能是基礎還不牢固,設置斷點,找了找問題才發現數組定義出了問題,
我是這樣定義數組的,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;
}
}