首先,需要转化的foreach循环如下
foreach (WSSyd syd in wssydj.Syds)
{
int yaopinindex = 0;
foreach (WSYzxx yzxx in syd.Yzxxs)
{
if (yzxx.Z_id == 0) continue;
num++;
y += rowGap;
x = leftMargin;
int lenthindex = 0;
e.Graphics.DrawString(num + "", font, brush, new RectangleF(x, y, lenth[0], 15));
x = x + lenth[lenthindex++];
e.Graphics.DrawString(yzxx.Ypmc + "", font, brush, new RectangleF(x, y, lenth[1], 15));
x = x + lenth[lenthindex++];
上面只列了循环的一部分,需要遍历的内容是wssydj.Syds和syd.Yzxxs,转化为for循环适用为不需要遍历整个数组可鞥只需要 wssydj.Syds.Length - 1 个数组而已,所以,就需要将foreach循环转变为for循环更加合适。
对于第一个循环,比较简单,我们只要直接写出来就可以了,如下
for (int i = 0; i < wssydj.Syds.Length ; i++)//遍历syd中的数
{
对于第二个循环,小弟才疏学浅,刚入门不久,学C#也没多久,对于这第二个循环楞是绞尽脑汁花了一个小时,还是在同事的帮助之下写好的,因为第二个循环需要用到第一个循环中的syd标识符,我们可以理解为for循环中的 i 变量 ,yzxx可以理解为for的第二循环的 j 变量,嗯...C/C++的毛病了。所以,第二个循环我们可以写成
for (int j = 0; j < wssydj.Syds[i].Yzxxs.Length; j++)
{
就是当执行完第一个for之后,在第二个for里面Syds数组为第 i 个的时候遍历wssydj.Syds[ i ].Yzxxs 这样子说,不知道能不能理解。
在循环内,若要表达数组中的某一个值的时候可以这样写
wssydj.Syds[i].Yzxxs[j].Ypmc.ToString()
if (wssydj.Syds[i].Yzxxs[j].Z_id == 0) continue;
全部表述如下:
for (int i = 0; i < wssydj.Syds.Length ; i++)//遍历syd中的数-1
{
//int yaopinindex = 0;
for (int j = 0; j < wssydj.Syds[i].Yzxxs.Length; j++)
{
if (wssydj.Syds[i].Yzxxs[j].Z_id == 0) continue;
FUYUAN