常见的for循环一般是一下代码这种结构 for (int i = ; i < ; i++) { ConsoleWriteLine(i); } 或者递减的 for (int i = ; i > ; i) { ConsoleWriteLine(i); } 但for当然不止这样一种用法for的定义()内的三段表达式除了中间的必须产生布尔型并未对其余两段有所限制只要是表达式就可以了在LuceneNet中就有好几次这样的用法例如 for (Token token = inputNext(result); token != null; token = inputNext(result)) { int len = tokenTermText()Length; if (len >= min && len <= max) { return token; } } 这个语句和下面代码的效果是一样的 Token token; while((token = inputNext(result)) != null) { int len = tokenTermText()Length; if (len >= min && len <= max) { return token; } } 其实我认为在这两种循环中第二种比第一种好理解一点 还有这种 for (i = ; i > ; ) jjrounds[i] = x; 出了一个空表达式呵呵其实理解一下也很简单和下面代码的效果一样 for (i = ; i > ; i) jjrounds[i] = x; 朋友留言指正修正以上代码为 for(i = ;i > ;i){ jjrounds[i] = x; } 又弄错了接受批评应该换成下面的 for(i = ; i >= ;i) jjrounds[i] = x; 空表达式也是一个表达式啊放在这里也不犯法 嘿嘿还有其他的表达式比如 for (int i = ; i < length; i++ pos++) 这个应该不难理解第三个表达式有两个第一个当然也可以有两个 比如 for (int i = j = ; i > ; ij++) 中间的表达式要想用两个就要加运算符了for (int i = j = ; i > || j> ; ij++) 这样就总结出三种for循环样式 for(int i = ;i < ;i++) //递减和递加的算一种 for(;true;) //有空表达式的 for (int i = j = ; i > || j> ; ij++) //有多表达式的 好像就这么多了但是还有一种我无法理解的表达式 for(;;)这是个 死循环 无限循环(没有跳出语句才能成为死循环)汗!!!庐山瀑布汗啊反正我理解不了 嘿嘿理解上面的表达式基本上看别人的代码就不会摸不着头脑了那是不是真的没有了呢? 来试试这种 static void Main(string[] args) { for (Act(); ; ) { } ConsoleRead(); } static void Act() { } 哈哈真是彻底被打败了注意没见过有这么用的纯粹是实验应用产生的后果我不负责啊 放上三个方法爽爽 static void Main(string[] args) { for (Act(); Act(); Act()) { } ConsoleRead(); } static void Act() { } static bool Act() { return true; } static bool Act() { return true; } 当然你非要用个委托我也没意见 delegate void Bind(); class Program { static void Main(string[] args) { Bind b = new Bind(Act); for (b(); Act(); Act()) { } ConsoleRead(); } static void Act() { } static bool Act() { return true; } static bool Act() { return true; } } 我考事件也出来了 delegate void Bind(); class Program { static event Bind bindEvent; static void Main(string[] args) { Bind b = new Bind(Act); bindEvent += new Bind(Program_bindEvent); for (b(); Act(); bindEvent()) { } ConsoleRead(); } static void Program_bindEvent() { } static void Act() { } static bool Act() { return true; } static bool Act() { return true; } } 看出来了只要是表达式就能使用啊!除了第二个表达式必须为空或者布尔值外其他两个基本没什么限制第二表达式为空则是死循环 |