آموزش کار با دستورات switch در سی شارپ - switch in csharp


دات وایت | DotWhite.ir
آموزش کار با دستورات switch در سی شارپ - switch in csharp

در این پست از دات وایت آموزش کار با دستورات switch...case در سی شارپ را برایتان قرار داده ایم که بعد از مطالعه این آموزش کار با دستورات switch...case را بصورت کامل فرا خواهید گرفت.

دستورات if تودرتو براي خواندن، اشكاليابي و كنترل درستبودن مشكل هستند. زماني كه يك مجموعه پيچيده از انتخابها وجود داشته باشد، دستور switch يك روش قدرتمندي است. منطق دستور switch اين است: " يك مقدار معين را برگزين و بر طبق آن عمل كن"

switch (expression)

        {

            case constant - expression

                    Statement

           Jump -Statement

                       [default: statement 1]

        }

عبارتي كه براساس آن سويچ ميكنيد، در بالاي دستور switch در داخل پرانتزها گذاشته ميشود. هر دستور case مقدار ثابتي را با عبارت مقايسه ميكند. عبارات ثابت ميتوانند يك مقدار ثابت، شمارشي، سمبل يا حرف باشند.

 كامپايلر از اولين دستور case شروع ميكند و تا پايين ادامه ميدهد و يك مقدار منطبق با عبارت را جستجو ميكند. اگر يكي از caseها منطبق گردد، دستور يا بلوك دستورات اختصاص يافته به آن اجرا ميشوند. بايد بلوك case به يك دستور پرش خاتمه يابد.

 زماني كه يك break در يك دستور switch اجرا ميگردد، اجراي دستور بعد از آكولاد بسته switch ادامه مييابد.

در مثال (1) از كاربر سوال ميشود، وابستگي سياسي خود را از ميان دموكرات، جمهوريخواه يا مترقي انتخاب كند. براي سادگي مثال، دموكرات بصورت ثابت انتخاب شده است.

مثال (1)

using System;

class Values

{

    enum Party

    {

        Democrat,

        Republican,

        Progressive

    }

    static void Main()

    {

        // hard wire to Democratic

        Party myChoice = Party.Democrat;

        // switch on the value of myChoice

        switch (myChoice)

        {

            case Party.Democrat:

                Console.WriteLine("You voted Democratic.");

                break;

            case Party.Republican:

                Console.WriteLine("You voted Republican.");

                break;

            case Party.Progressive:

                Console.WriteLine("You voted Progressive.");

                break;

        }

        Console.WriteLine("Thank you for voting.");

    }

}

خروجي شبيه زير است :

You voted Democratic.

Thank you for voting

مثال (1) به جاي يك دستور if پيچيده، يك دستور switch بكار ميبرد. در ابتدا، انتخاب كاربر بوسيله ي دستور switch ارزيابي ميشود و بلوكي از دستورات اجرا ميشوند كه case آن با مقدار مورد نظر منطبق ميباشد. در اين مثال (Democrat).

 دستورات مابين دستور case و break به ترتيب اجرا ميشوند. ميتوانيد بدون اينكه از آكولادها استفاده كنيد، بيش از يك دستور قرار دهيد،. دستور case و break به ترتيب جاي آكولاد باز و بسته ميباشند. ممكن است يك كاربر چيزي به غير از برنامه نويسي دموكرات، جمهوريخواه و مترقي انتخاب كند و همانطور كه در مثال (2) مشاهده ميكنيد، ممكن است بخواهيد يك case پيشفرض ايجاد كنيد كه با يك انتخاب نامعتبر دستورات آن اجرا گردد.

مثال (2)

using System;

class Values

{

    enum Party

    {

        Democrat,

        Republican,

        Progressive

    }

    static void Main()

    {

        // hard wire to Democratic

        Party myChoice = Party.Democrat;

        // switch on the value of myChoice

        switch (myChoice)

        {

            case Party.Democrat:

                Console.WriteLine("You voted Democratic.");

                break;

            case Party.Republican:

                Console.WriteLine("You voted Republican.");

                break;

            case Party.Progressive:

                Console.WriteLine("You voted Progressive.");

                break;

            default:

                Console.WriteLine("You did not make a valid choice.");

                break;

        }

        Console.WriteLine("Thank you for voting.");

    }

}

خروجي شبيه زير است :

 You did not make a valid choice. 

 Thank you for voting.

اگر كاربر يكي از مقادير متناسب با يك دستور case را انتخاب نكند، دستورات default را اجرا خواهد كرد. در اين مثال يك پيام چاپ ميشود كه به كاربر ميگويد

انتخاب معتبري انجام نداده است. در كد برنامه اصلي، اين قطعه كد داخل يك حلقه while قرار ميگيرد تا زماني كه يك انتخاب معتبر صورت گيرد. 


سرازير شدن يا پرش بهcase ها

اگر دوcase دستورات يكساني اجرا كنند، يك case "سرازير شدني" ايجاد ميكنيم كه چندين دستور case با كد يكسان را گروهبندي ميكند. همانطور كه در اينجا ميبينيد:

case Compassionate Republican :

case Republican:

Console.WriteLine("you voted Republican./n");

Console.Write line("do not you feel compassioned");



در اين مثال اگر كاربر يكي از دو مورد جمهوري يا جمهوري دلسوز را انتخاب كند، مجموعه دستورات يكساني اجرا خواهند شد.
توجه كنيد فقط در صورتي كه case اولي هيچ كدي نداشته باشد، ميتوانيد سرازير شويد. در اين مثال case اول اين معيار را برآورده ميكند. پس مي توانيد به case دوم سرازير شويد. با اين وجود، اگر بخواهيد در case اول دستوري اجرا كرده، سپس به case بعدي سرازير شود. بايد كلمه كليدي goto را جهت پرش بهcase بعدي مورد نظر بكار بريد. كلمه كليدي goto يك انشعاب غيرشرطي است. زماني كه كامپايلر اين دستور را ميبيند، كنترل برنامه فوراًبه جايي كه آن اشاره ميكند انتقال مييابد. حتي اگر آن در داخل يك دستور انشعاب شرطي گذاشته شده باشد. 
براي مثال، اگر يك بخش NewLeft ايجاد كنيد. ممكن است بخواهيد با انتخاب NewLeft يك پيام چاپ شده و به Democrat سرازير گردد. ممكن است كد زير را بنويسيد :

case NewLeft:

        Console.write line("the New Left members are Voting Democratic");

case Democrat:

        Console.write line(" you Voted Democratic./n");

        Break;

اين كد كامپايل نخواهد شد و با يك خطا شكست مي خورد:

Control cannot fall through from one case label(case'4') To another
اين يك پيام خطاي گمراه كننده است. در صورتي كه برچسب اولي دستوري نداشته باشد، كنترل اجرا ميتواند از يك برچسب به برچسب ديگري سرازير گردد. توجه كنيد كه پيام خطا نام case را با مقدار شمارشي آن (4 (به جاي مقدار سمبليك آن (NewLeft) نمايش ميدهد. بخاطر داريد كه NewLeft فقط نام ثابت است.

const int Democrat = 0;

const int Compassioned Republican = 1;

const int Republican = 2;

const int Progressive = 3;

const int NewLeft = 4;

چون case مربوط به NewLeft يك دستور دارد، براي سرازير شدن به case بعدي بايد يك دستور goto بكار بريد:

case NewLeft:

        Console.write line("the New Left members are Voting Democratic");

        Goto case Democrat;

case Democrat;

        Console.write line("you Voted Democratic./n");

        Break;


همانطور كه انتظار داريد اين كد كامپايل و اجرا خواهد شد. توجه كنيد كه لازم نيست Democrat بعد از NewLeft قرار گيرد.

 رشته ها رويswitch دستورات

در مثالهاي قبلي مقدار switch يك ثابت صحيح بود. C #قابليت switch روي يك رشته را نيز پيشنهاد ميكند. پس همانطور كه در مثال (3) ميبينيد، مي توانيد مثال (2) را براي switch روي رشته ها رونويسي كنيد

مثال (3)

using System;

class Values

{

    static void Main()

    {

        String myChoice = "NewLeft";

        // switch on the string value of myChoice

        switch (myChoice)

        {

            case "NewLeft":

            Console.WriteLine(

            "The NewLeft members are voting Democratic.");

                    goto case "Democrat";

            case "Democrat":

            Console.WriteLine("You voted Democratic.n");

                    break;

            case "CompassionateRepublican"// fall through

            case "Republican":

            Console.WriteLine("You voted Republican.n");

                    Console.WriteLine("don't you feel compassionate?");

                    break;

            case "Progressive":

            Console.WriteLine("You voted Progressive.n");

                    break;

                    default:

            Console.WriteLine("You did not make a valid choice.");

                    break;

        }

                Console.WriteLine("Thank you for voting.");

    }

}



تاریخ انتشار : سه شنبه 07 دي 1395 ساعت: 12:37 | نظرات()
برچسب ها : , , , , , , ,

نویسنده :

بازديد : 622

موضوع: سی شارپ , کد های مفید ,

بخش نظرات این مطلب
نام
ایمیل (منتشر نمی‌شود) (لازم)
وبسایت
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
نظر خصوصی
مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
کد امنیتیرفرش کد امنیتی