এক কেস লেবেল থেকে নিয়ন্ত্রণ পড়তে পারে না


156

আমি একটি স্যুইচ বিবৃতি লেখার চেষ্টা করছি যা অনুসন্ধানের ক্ষেত্রে অনুসন্ধান শব্দটি টাইপ করবে যে কোনও অনুসন্ধান পাঠ্যবাক্স উপস্থিত রয়েছে তার উপর নির্ভর করে। আমার কাছে নিম্নলিখিত কোড রয়েছে। তবে আমি একটি "কেস লেবেল থেকে নিয়ন্ত্রণটি পড়তে পারি না" ত্রুটিটি পাচ্ছি।

switch (searchType)
{
    case "SearchBooks":
        Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchBooks_SearchBtn']");

    case "SearchAuthors":
        Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
}

নিয়ন্ত্রণ এক কেস লেবেল ( case "SearchBooks":) থেকে অন্য ক্ষেত্রে যেতে পারে না

নিয়ন্ত্রণ এক কেস লেবেল ( case "SearchAuthors":) থেকে অন্য ক্ষেত্রে যেতে পারে না

উত্তর:


260

আপনি সেখানে কিছু বিরতি মিস করেছেন:

switch (searchType)
{
    case "SearchBooks":
        Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
        break;

    case "SearchAuthors":
        Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
        break;
}

তাদের ব্যতীত, সংকলকটি মনে করে আপনি নীচের লাইনগুলি কার্যকর করার case "SearchAuthors":পরে অবিলম্বে নীচের লাইনগুলি কার্যকর করার চেষ্টা করছেন case "SearchBooks":যা সি # তে অনুমোদিত নয়।

breakপ্রতিটি মামলার শেষে বিবৃতিগুলি যুক্ত করে , প্রোগ্রামটি প্রতিটি কেসটি সম্পন্ন হওয়ার পরে, যার যে কোনও মূল্যের জন্যই বেরিয়ে যায় searchType


31
আমার জন্য, আমি এই কোডটি এবং আমার নিজের দিকে তাকিয়ে বসেছিলাম যতক্ষণ না অবশেষে আমি বুঝতে পারি যে আমি আসলেই শেষের ক্ষেত্রে বিরতিটি অনুপস্থিত, যাকে যে সহায়ক বলে মনে হয় for
সোমোসো

13
এবং যদি আমার সমাধানটির কোনও প্রয়োজন হয় না breakকারণ এটি কিছু পরিস্থিতিতে পড়তে হবে ?!
কালো

10
বাহ, হেক সি # ডেভস কি ভাবছিল ?! এটি আমি জানি প্রতিটি প্রোগ্রামিং ভাষায় কাজ করে তবে সি # তে নয়।
কালো

8
এই উত্তরটির একটি জিনিস যা অনুপস্থিত তা হ'ল আপনি এখনও সি-স্টাইল ফল-থ্রো ব্যবহার করে করতে পারেন goto case "some String"
এনএইচ।

3
আমি এটা কখনই বুঝতে পারি নি। আমি সবসময়ই ভেবেছিলাম যে সিবি ++ এর মধ্যে ভিবি কেস ফল-থ্রু বৈশিষ্ট্যটি হারিয়েছে। এখন আমি জানতে পারি যে সি # এর এটিও নেই, এবং আঘাতের অপমান যুক্ত করতে আপনাকে ব্রেক স্টেটমেন্টটি টাইপ করতে হবে। এটি এটি অটোফিলও করবে না।
Brain2000

138

আপনি প্রয়োজন break;, throw, goto, অথবা returnআপনার ক্ষেত্রে লেবেল প্রতিটি থেকে। একটি লুপ আপনি করতে পারেন continue

        switch (searchType)
        {
            case "SearchBooks":
                Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
                Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
                break;

            case "SearchAuthors":
                Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
                Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
                break;
        }

কেবলমাত্র যখন সত্য লেবেলগুলি এই জাতীয় স্ট্যাক করে রাখা হয় তা সত্য নয়:

 case "SearchBooks": // no code inbetween case labels.
 case "SearchAuthors":
    // handle both of these cases the same way.
    break;

2
continueপাশাপাশি সম্ভব
টোবিয়াস ভ্যালিনস্কি

3
কেউ ব্যাখ্যা করতে পারেন - কেন? আমি মনে করি কোড কার্যকর করার জন্য বৈধ ব্যবহারের কেস রয়েছে এবং পরবর্তী ক্ষেত্রেও নিয়ন্ত্রণ অব্যাহত থাকে।
ইয়াসারবাহান

9
@ ইশারবাহান, আমি মনে করি যে ভাষাগুলিতে কেস পড়ার পক্ষে সমর্থন করে এমন ভাষাগুলিতে উদ্দেশ্যমূলক মামলার চেয়ে অনেক বেশি বাগ রয়েছে। সি # তে, ভাষা আপনাকে অনুমতি দেয় goto case "SearchBooks";যাতে আপনার খুব বেশি ভাব প্রকাশ না হারাতে বা অপ্রত্যাশিত বাগগুলি যুক্ত না করে যা করতে হবে তা করার ক্ষমতা আপনার রয়েছে।
এজেন্ট-জে

2
@ এজেন্ট-জে আমি দেখতে পাচ্ছি। ধন্যবাদ, এটি অনেক অর্থবোধ করে। এছাড়াও, আমি জানতাম না যে আপনি এর মতো গোটো ব্যবহার করতে পারেন, এটি সত্যিই দুর্দান্ত! (যদিও, আমি মনে করি আমি সর্বদা এটির ব্যবহারে ক্লান্ত থাকব যেহেতু আমার অধ্যাপকরা আমাকে নিশ্চিত করেছেন যে আমি যদি স্বতঃস্ফূর্তভাবে
ঝাঁক দাও তবে

2
কেন এটি এক গৃহীত উত্তর নয়? এটি স্যুইচ স্টেটমেন্ট এবং প্রশ্নের উত্তর দেওয়ার সাথে সাথে আপনার কাছে বিকল্পগুলি সম্পর্কে আরও জানায়।
ডটনেট প্রোগ্রামার

30

আপনি # সি তে পড়ে যাওয়া ছাড়াও আরও কিছু করতে পারেন তবে আপনাকে অবশ্যই "ভয়ঙ্কর" গোটো বিবৃতিটি ব্যবহার করতে হবে। উদাহরণ স্বরূপ:

switch (whatever)
{
  case 2:
    Result.Write( "Subscribe" );
    break;
  case 1:
    Result.Write( "Un" );
    goto case 2;
}

14

আপনার একটি ব্রেক স্টেটমেন্ট যুক্ত করতে হবে:

switch (searchType)
{
case "SearchBooks":
    Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
    break;
case "SearchAuthors":
    Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
    break;
}

এই অনুমান যে আপনি চান পারেন হ্যান্ডেল করতে SearchBooksক্ষেত্রে বাSearchAuthors - হিসাবে আপনি লেখা ছিল একটি ঐতিহ্যগত সি-শৈলী সুইচ বিবৃতি নিয়ন্ত্রণ প্রবাহ হবে আগামী অর্থ এক ক্ষেত্রে বিবৃতি থেকে "মাধ্যমে নিপতিত" আছে, যে কোড সব 4 লাইন যেখানে মৃত্যুদন্ড কার্যকর করা হবে searchType == "SearchBooks"

আপনি যে সংকলক ত্রুটিটি দেখছেন তা এই সম্ভাব্য ত্রুটি সম্পর্কে প্রোগ্রামারকে সতর্ক করতে (অন্তত কিছুটা অংশে) প্রবর্তিত হয়েছিল।

বিকল্প হিসাবে আপনি কোনও ত্রুটি ফেলে দিতে পারেন বা কোনও পদ্ধতি থেকে ফিরে আসতে পারেন।


1
এখানে কি সি-এর মতো স্যুইচটি প্রতিলিপি করার কোনও উপায় আছে? একটি স্যুইচে কিছু কোড চালান এবং তারপরে অন্যটির মধ্যে পড়ে যা সবার জন্য চলবে?
জন দেমেট্রিও

@ জনডেমিটরিও আপনি একই প্রতিলিপি করতে কেস স্টেটমেন্টে যেতে পারেন।
itsme.cvk

4

প্রতিটি সুইচ কেস শেষে এই সমস্যাটি সমাধান করার জন্য ব্রেক স্টেটমেন্টটি যুক্ত করুন-

           switch (manu)
            {
                case manufacturers.Nokia:
                    _phanefact = new NokiaFactory();
                    break;

                case manufacturers.Samsung:
                    _phanefact = new SamsungFactory();
                    break;

            }

4

যেহেতু এটি অন্যান্য উত্তরে উল্লেখ করা হয়নি, তাই আমি যুক্ত করতে চাই যে আপনি যদি প্রথম কেসটি সম্পন্ন করার পরে কেস সার্চ লেখকদের মৃত্যুদন্ড কার্যকর করতে চান ঠিক যেমন কিছু অন্যান্য প্রোগ্রামিং ভাষায় "বিরতি" বাদ দেওয়ার ক্ষেত্রেও এটি ঘটে থাকে যেখানে অনুমতি দেওয়া আছে, আপনি কেবল "গোটো" ব্যবহার করতে পারেন।

switch (searchType)
{
    case "SearchBooks":
    Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
    goto case "SearchAuthors";

    case "SearchAuthors":
    Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
    Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
    break;
}

2

আপনি ব্রেক স্টেটমেন্ট মিস করেছেন default ডিফল্ট ক্ষেত্রেও ব্রেক স্টেটমেন্টটি ভুলে যাবেন না।

switch (searchType)
{
    case "SearchBooks":
        Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchBooks_SearchBtn']");
        break;

    case "SearchAuthors":
        Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText);
        Selenium.Click("//*[@id='SearchAuthors_SearchBtn']");
        break;
    default :
        Console.WriteLine("Default case handling");
        break;

}

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Case_example_1
{
    class Program
    {
        static void Main(string[] args)
        {
            Char ch;
            Console.WriteLine("Enter a character");
            ch =Convert.ToChar(Console.ReadLine());
            switch (ch)
            {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                case 'A':
                case 'E':
                case 'I':
                case 'O':
                case 'U':

                    Console.WriteLine("Character is alphabet");
                    break;

                default:
                    Console.WriteLine("Character is constant");
                    break;

            }

            Console.ReadLine();

        }
    }
}

1
এটি কেন একটি সমাধান তা বোঝাতে আপনার কিছু শব্দ বা কিছু দেওয়া উচিত। যেহেতু আপনি ব্যাখ্যা করছেন না যে কেন আপনার কারও জন্য বিরতি প্রয়োজন এবং অন্যের জন্য নয়।
ডটনেট প্রোগ্রামার

3
আপনার অর্থ কি "ব্যঞ্জনবর্ণ"?
maksymiuk

1
1. আমি মনে করি আপনি "স্বর" বনাম "" বর্ণমালা "বোঝাতে চেয়েছিলেন। ২. আপনি switch (ch)নিম্নলিখিতটিতে পরিবর্তন করতে চাইতে পারেন । char vowelCheckChar = ( (Char.ToLower(ch) == 'y') ? ( ((new Random()).Next(2) == 0) ? ch : 'a' ) : ch ); // char vowelCheckChar = switch (vowelCheckChar)দুঃখিত, ছিল। ;)
টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.