close

C#的人都知道,有件事是很痛苦的,那就是C#根本就沒有do case語法這玩意,有的只是Switch,而vbSelect 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 foxprodo 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 foxprodo case 的語法,把各式各樣不同的條件都放在同一個區塊,作單一判斷執行。

對於這個情形,我很頭大,我相信很多人也一樣,想要看看有什麼方法,可以達成?

終於,我在2014/03/17 15:30左右,想出了一個終極解決方案,以下方式為個人原創,並無抄襲,在之前的網路搜尋,我也沒有看到別人提出來過,說明方式如下:

Visual foxprodo case 的語法,是只執行一次,只要其中有case條件成立,就執行,若無任何條件,就都不執行(很像廢話,但事實如此)。

好,我的方法很簡單,C#就是用for (條件),來摹擬Visual foxprodo 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 ,你可以用數字陣列,來管理層數,這樣子就不用很多的變數,比較不會搞亂,事情會簡單些。

寫到這裡,心情就很愉快,畢竟,解決了一件大家都無可奈何的程式,感覺實在很好。。。。。

 

如果本文有幫到你的話,請不要吝嗇幫忙點一下旁邊或是上面的廣告,贊助一下個人,非常感謝您。

 

arrow
arrow
    全站熱搜
    創作者介紹

    Mis人員的研究 發表在 痞客邦 留言(0) 人氣()