在网上看到这篇关于for循环文章,介绍给大家看看: 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 (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; } } 看出来了,只要是表达式,就能使用啊!除了第二个表达式必须为空,或者布尔值外,其他两个基本没什么限制。第二表达式为空则是死循环。
|