在網上看到這篇關于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; } } 看出來了,只要是表達式,就能使用!除了第二個表達式必須為空,或者布爾值外,其他兩個基本沒什么限制。第二表達式為空則是死循環。
|