这样就总结出三种for循环样式 1、for(int i = 0;i 0 || j0 ; i--,j++) //有多表达式的 还有....

常见的for循环一般是一下代码这种结构:

for (int i = 0; i < 100; i++)

{

    Console.WriteLine(i);

}

 

或者递减的:

 

for (int i = 100; i > 0 ; i--)

            {

                Console.WriteLine(i);

            }

 

 

但for当然不止这样一种用法。for的定义,()内的三段表达式,除了中间的必须产生布尔型,并未对其余两段有所限制,只要是表达式就可以了。在Lucene.Net中就有好几次这样的用法。例如:

 

for (Token token = input.Next(result); token != null; token = input.Next(result))

{

     int len = token.TermText().Length;

     if (len >= min && len <= max)

     {

         return token;

     }

}

 

这个语句和下面代码的效果是一样的:

 

Token token;

            while((token = input.Next(result)) != null)

            {

                int len = token.TermText().Length;

                if (len >= min && len <= max)

                {

                    return token;

                }

            }

其实我认为在这两种循环中,第二种比第一种好理解一点。

 

还有这种

 

for (i = 75; i-- > 0; )

    jjrounds[i] = 0x80000000;

 

出了一个空表达式,呵呵。其实理解一下也很简单,和下面代码的效果一样:

 

for (i = 75; i > 0; i--)

    jjrounds[i] = 0x80000000;

朋友留言指正,修正以上代码为:

for(i = 74;i > 0;i--){
= 0x80000000;
}

 

又弄错了,接受批评。应该换成下面的

for(i = 74; i >= 0;i--)
= 0x80000000;

 

空表达式,也是一个表达式啊,放在这里也不犯法。

 

嘿嘿,还有其他的表达式,比如:

 

for (int i = 0; i < length; i++, pos++)

这个应该不难理解,第三个表达式有两个,第一个当然也可以有两个

 

比如            for (int i = 100, j = 100; i > 0 ; i--,j++)

中间的表达式要想用两个就要加运算符了for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++)


这样就总结出三种for循环样式

1、for(int i = 0;i < 100;i++)  //递减和递加的算一种
2、for(;true;)     //有空表达式的
3、for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++)   //有多表达式的

好像就这么多了。但是还有一种,我无法理解的表达式

for(;;)这是个 死循环 无限循环(没有跳出语句,才能成为死循环),汗!!!庐山瀑布汗啊,反正我理解不了。

 

嘿嘿,理解上面的表达式,基本上看别人的代码就不会摸不着头脑了。那是不是真的没有了呢?

来试试这种

static void Main(string[] args)

        {

            for (Act(); ; )

            {


            }

            Console.Read();

        }


        static void Act()

        {



        }

 

哈哈,真是彻底被打败了。注意:没见过有这么用的,纯粹是实验,应用产生的后果我不负责啊。

 

放上三个方法爽爽:

static void Main(string[] args)

        {

            for (Act1(); Act2(); Act3())

            {


            }

            Console.Read();

        }


        static void Act1()

        {


        }


        static bool Act2()

        {

            return true;

        }


        static bool Act3()

        {

            return true;

        }

当然,你非要用个委托,我也没意见:

 

delegate void Bind();

    class Program

    {

        static void Main(string[] args)

        {

            Bind b = new Bind(Act1);

            for (b(); Act2(); Act3())

            {


            }

            Console.Read();

        }


        static void Act1()

        {


        }


        static bool Act2()

        {

            return true;

        }


        static bool Act3()

        {

            return true;

        }

    }

 

我考事件也出来了:

 

delegate void Bind();

    class Program

    {

        static event Bind bindEvent;


        static void Main(string[] args)

        {

            Bind b = new Bind(Act1);

            bindEvent += new Bind(Program_bindEvent);

            for (b(); Act2(); bindEvent())

            {


            }

            Console.Read();

        }


        static void Program_bindEvent()

        {

           

        }


        static void Act1()

        {


        }


        static bool Act2()

        {

            return true;

        }


        static bool Act3()

        {

            return true;

        }

    }

 

看出来了,只要是表达式,就能使用啊!除了第二个表达式必须为空,或者布尔值外,其他两个基本没什么限制。第二表达式为空则是死循环。

 

嘿嘿,无聊整出来的,欢迎大家拍砖!知道其他用法的朋友分享一下。

 

2008年8月4日 by yurow @