學C#的人都知道,有件事是很痛苦的,那就是C#根本就沒有do case語法這玩意,有的只是Switch,而vb有Select case 這東西。
為什麼要提這件事呢?因為我是個寫Visual foxpro的人,用過Visual foxpro的人 ,都會知道do case endcase這個語法有多好用!只要你想得到的條件,全都可以加到其中。
但是到了C#就徹底被打敗了,最多就是只能用Switch,它的語法如下(這是微軟的範例):
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
可是,事實上,有時,程式的複雜度,不是很單純的由一個變數值就決定的,所以Switch的功能,就會變的很有限,以下是Visual foxpro的do case 語法(以下為求助檔的範例):
STORE CMONTH(DATE( )) TO month && 今日的月份 DO CASE && 迴圈開始 CASE INLIST(month,'January','February','March') &&<--- 條件 STORE '第一季收入' TO rpt_title CASE INLIST(month,'April','May','June') STORE '第二季收入' TO rpt_title CASE INLIST(month,'July','August','September') STORE '第三季收入' TO rpt_title Case Xp=”任意加入的條件” &&ß我任意加入的執行條件 Messagebox(“任意加入的條件",68,6000) OTHERWISE STORE '第四季收入' TO rpt_title ENDCASE && 迴圈結束 WAIT WINDOW rpt_title NOWAIT |
&&-----------------------------------------------------------------------------------------------
如果你會一點Visual foxpro語法,你就會知道,do case 的功能之強大,實在教人無法捨棄,因為只要你想要設定的條件,統統可以寫到其中,而不是像C#的Switch,只能判某個值。當然,網路上也有人教導用以下的方式,來達成:
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
goto case 1; //這樣也可以達到多值範圍的處理
default:
Console.WriteLine("Default case");
break;
}
//---------------------------------------------------------
可是呢,它仍然無法達成像Visual foxpro,do case 的語法,把各式各樣不同的條件都放在同一個區塊,作單一判斷執行。
對於這個情形,我很頭大,我相信很多人也一樣,想要看看有什麼方法,可以達成?
終於,我在2014/03/17 15:30左右,想出了一個終極解決方案,以下方式為個人原創,並無抄襲,在之前的網路搜尋,我也沒有看到別人提出來過,說明方式如下:
Visual foxpro,do case 的語法,是只執行一次,只要其中有case條件成立,就執行,若無任何條件,就都不執行(很像廢話,但事實如此)。
好,我的方法很簡單,C#就是用for (條件),來摹擬Visual foxpro,do case 的語法。
範例大致如下
Int I,j; //可以改用數字陣列
for (i=0;<1;i++)
{
If (條件1成立時)
{
執行條件1….
Break;
}
If (條件2成立時)
{
執行條件2….
Break;
}
If (條件3成立時)
{
//條件3,下層再摹擬do case
for (j=0;j<1;j++)
{
If (下層條件1成立時)
{
執行層條件1….
Break;
}
If (下層條件2成立時)
{
執行層條件2….
Break;
}
}
Break;
}
}
//------------------------------------------------------------------
如果你仔細看上面的範例,你會發現,其中只有某個條件成立時,才會被執行,而且程式不會相互干擾,目前這個寫法,我已經付諸實行在自己的C#程式中,執行良好。
當然,如果你的程式有很多層的(摹擬Visual foxpro do case) ,你可以用數字陣列,來管理層數,這樣子就不用很多的變數,比較不會搞亂,事情會簡單些。
寫到這裡,心情就很愉快,畢竟,解決了一件大家都無可奈何的程式,感覺實在很好。。。。。
如果本文有幫到你的話,請不要吝嗇幫忙點一下旁邊或是上面的廣告,贊助一下個人,非常感謝您。
留言列表